两大名单的快速结合

本文关键字:结合 名单 | 更新日期: 2023-09-27 18:31:18

>我在两个大列表(超过 100 万个条目)上使用联合,而且速度很慢(几分钟)我需要该功能来删除重复项,因此我无法使用 concat 并且我的列表未排序。有没有更快的方法?也许使用plinq

两大名单的快速结合

你不是说你的项目在列表中是什么,但一种选择是为此任务使用正确的数据结构 - 你只想保留唯一的项目 - 它是 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