您的位置:首页 > 编程语言 > C#

使用C#去掉10万级数组中重复的数据

2013-03-30 16:21 405 查看
最近做了个小程序,其中有个功能是去掉数组中的重复数据,开始没有考虑数组数量的问题,使用了一般的算法。但后面别人和我说5W条数据等了10分钟还没有成功,汗。。。

(刚才写这篇文章,浏览器突然自动刷新了,郁闷呀,写的一点都没有了,都没自动保存草稿,纠结)

后面用了别一种算法,基本上20S内可以完成了。

测试数据1万条

第一种算法(4分钟)

/// <summary>
/// List泛型去重
/// </summary>
/// <param name="list">由一维数组组成的泛型</param>
/// <param name="ItemID">要去除重复的项</param>
private void RemoveRepeaterUrl(ref List<string[]> list,int ItemID)
{
for (int i = 0; i < list.Count; i++)
{
for (int j = (i + 1); j < list.Count; j++)
{
if (list[j][ItemID] == list[i][ItemID])
{
list.RemoveAt(j);//去除相同的项
i = 0;//从新开始去重,如果数组内有大量重复的项,仅一次去重不能解决问题。这样的用法会使效率慢1/3
j = 0;
}
}
}
}


第二种算法(4S)

//去除重复的数据, 返回list

//利用类库中的hashtable类的containsKeys方法判断hashtable中是否存在这个数据,要是不存在就

//把数据添加到新的List中,最后清空hashtable

public List<string> getUnque(List<string> list)
{
List<string> list1 = new List<string>();
Hashtable hash = new Hashtable();
foreach (string stu in list)
{
string[] kk1 = stu.Split(new string[] { "--" }, StringSplitOptions.RemoveEmptyEntries);
string comword = kk1.Length==3 ? kk1[2]:"";
if (!hash.ContainsKey(comword))
{
hash.Add(comword, comword);
list1.Add(stu);
}
}
hash.Clear();
hash = null;
return list1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: