比较两个通用列表差异的最快方法
比较两个大型项目(> 50.000个项目)最快(且最不占用资源)是什么,因此有两个列表如下:
- 显示在第一个列表中但不在第二个列表中的项目
- 出现在第二个列表中但不在第一个列表中的项目
目前,我正在使用List或IReadOnlyCollection,并在linq查询中解决此问题:
var list1 = list.Where(i => !list2.Contains(i)).ToList();var list2 = list2.Where(i => !list.Contains(i)).ToList();
但这并没有我想要的那样好。有什么想法可以让我更快地,减少资源消耗,因为我需要处理很多列表?
回答:
用途Except
:
var firstNotSecond = list1.Except(list2).ToList();var secondNotFirst = list2.Except(list1).ToList();
我怀疑有这实际上是略高于这个速度的方法,但即使这样会 大大 超过你的O(N * M)的方法要快。
如果要组合使用这些方法,可以使用上面的方法创建一个方法,然后再使用return语句:
return !firstNotSecond.Any() && !secondNotFirst.Any();
要注意的一点是,有 是
在问题的原代码和这里的解决方案之间的结果有所不同:其中仅在一个列表中的任何重复的元素将只报告一次我的代码,而他们会被报告为多原始代码中出现的次数。
例如,清单[1, 2, 2, 2, 3]
和[1]
,在“列表1中的元素,但不是列表2”导致原始代码将是[2, 2, 2,
3]。用我的代码就可以了[2, 3]
。在许多情况下,这不是问题,但是值得一提。
以上是 比较两个通用列表差异的最快方法 的全部内容, 来源链接: utcz.com/qa/408013.html