我在两个大名单上使用了联合(超过100万个条目)并且它很慢(几分钟)
我需要该功能删除重复项,所以我不能使用concat,我的列表没有排序。
有更快的方法吗?也许使用plinq
?
答案 0 :(得分:3)
您没有说明列表中的项目是什么,但是一个选项是使用适当的数据结构来执行此任务 - 您只想保留唯一项目 - 它是SET的定义,因此请使用HashSet。
var hashSet = new HashSet<int>(list1);
hashSet.UnionWith(list2);
此外,我测量了上面代码与Linq.Union的比较时间:
var list3 = list1.Union(list2).Distinct();
这是计时(HashSet.UnionWith的工作速度提高了近两倍):
HashSet.UnionWith
real 0m4.111s
user 0m3.890s
sys 0m0.132s
real 0m4.562s
user 0m4.074s
sys 0m0.170s
real 0m4.052s
user 0m3.851s
sys 0m0.129s
real 0m4.003s
user 0m3.814s
sys 0m0.125s
real 0m4.058s
user 0m3.858s
sys 0m0.126s
Linq.Union.Distinct
real 0m7.579s
user 0m7.014s
sys 0m0.428s
real 0m7.498s
user 0m6.965s
sys 0m0.419s
real 0m7.596s
user 0m6.994s
sys 0m0.412s
real 0m7.446s
user 0m6.917s
sys 0m0.416s
real 0m7.452s
user 0m6.928s
sys 0m0.403s