可以在网上找到的代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
string
[] stringArray
=
{
"
aaa
"
,
"
bbb
"
,
"
aaa
"
,
"
ccc
"
,
"
bbb
"
,
"
ddd
"
,
"
ccc
"
,
"
aaa
"
,
"
bbb
"
,
"
ddd
"
};
// List用于存储从数组里取出来的不相同的元素
List < string > listString = new List < string > ();
foreach ( string eachString in stringArray)
{
if ( ! listString.Contains(eachString))
listString.Add(eachString);
}
// 最后从List里取出各个字符串进行操作
foreach ( string eachString in listString)
{
Console.Write(eachString); // 打印每个字符串
}
// List用于存储从数组里取出来的不相同的元素
List < string > listString = new List < string > ();
foreach ( string eachString in stringArray)
{
if ( ! listString.Contains(eachString))
listString.Add(eachString);
}
// 最后从List里取出各个字符串进行操作
foreach ( string eachString in listString)
{
Console.Write(eachString); // 打印每个字符串
}
原理应该比较容易理解吧,通过遍历原数组中的每一个元素,将元素添加到新的泛型listString中,如果listString已经包含了就不添加,当遍历完原数组,泛型中保存的就是去重后的结果了。
在数据量小的时候用这个算法还OK,但如果数据量比较大时(我工作中需要将5万以上左右的数据去重)其效率就不是那么让人接受了,一次处理需要耗费近1分钟左右的时间(测试电脑用的Inter Pentium D 2.8GHz、1G内存)
由于需求对结果的元素序列没有任何要求,我采取了下列算法来提高效率
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
string
[] stringArray
=
{...因为是从文件读取的,这里省略了...}
List < string > listString = new List < string > ();
Array.Sort(stringArray ); // 排序数组
int MaxLine = stringArray.Length;
#region 单独计算第一个
if (sourceData[ 0 ] != stringArray[ 1 ])
{
listString.Add(stringArray[ 0 ]);
}
#endregion
for ( int i = 1 ; i < MaxLine; i ++ )
{
if (sourceData[i] != stringArray[i - 1 ])
{
listString.Add(stringArray[i]);
}
}
List < string > listString = new List < string > ();
Array.Sort(stringArray ); // 排序数组
int MaxLine = stringArray.Length;
#region 单独计算第一个
if (sourceData[ 0 ] != stringArray[ 1 ])
{
listString.Add(stringArray[ 0 ]);
}
#endregion
for ( int i = 1 ; i < MaxLine; i ++ )
{
if (sourceData[i] != stringArray[i - 1 ])
{
listString.Add(stringArray[i]);
}
}
思路是:首先对数组进行排序,这样相同的数组就排列在了一起。然后遍历原数组,一次取出当前元素和上一个元素,如果2个元素相等就跳过,不相等就将其元素的保存到泛型listString中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)
文章来自: http://excellent.cnblogs.com/
本文版权归作者和博客园共同所有,欢迎大家转载,如有转载请注明