算法:C#数组去除重复元素算法研究

可以在网上找到的代码:

 

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);
// 打印每个字符串
}

 

原理应该比较容易理解吧,通过遍历原数组中的每一个元素,将元素添加到新的泛型listString中,如果listString已经包含了就不添加,当遍历完原数组,泛型中保存的就是去重后的结果了。

 

在数据量小的时候用这个算法还OK,但如果数据量比较大时(我工作中需要将5万以上左右的数据去重)其效率就不是那么让人接受了,一次处理需要耗费近1分钟左右的时间(测试电脑用的Inter Pentium D 2.8GHz、1G内存)

由于需求对结果的元素序列没有任何要求,我采取了下列算法来提高效率

 

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]);
}
}

 

思路是:首先对数组进行排序,这样相同的数组就排列在了一起。然后遍历原数组,一次取出当前元素和上一个元素,如果2个元素相等就跳过,不相等就将其元素的保存到泛型listString中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)

 


文章来自:   http://excellent.cnblogs.com/   

本文版权归作者和博客园共同所有,欢迎大家转载,如有转载请注明



转载于:https://www.cnblogs.com/Excellent/archive/2011/01/14/1935768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值