比较两个大型项目(> 50.000个项目)最快(且最不占用资源)是什么,因此有两个列表如下:
目前,我正在使用List或IReadOnlyCollection,并在linq查询中解决此问题:
var list1 = list.Where(i => !list2.Contains(i)).ToList(); var list2 = list2.Where(i => !list.Contains(i)).ToList();
但这并没有我想要的那样好。有什么想法可以让我更快地,减少资源消耗,因为我需要处理很多列表?
用途Except:
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]。在许多情况下,这不是问题,但是值得一提。
[1, 2, 2, 2, 3]
[1]
[2, 2, 2, 3]
[2, 3]