比较两个列表并返回不同的值和差异

时间:2013-08-07 09:01:19

标签: linq list c#-4.0 duplicates

我有两个清单:

List A {A, B, C, D}

List B {A, E, F, G}

我需要制作三个列表:

只有列表A中的项目

(B,C,D)

只有列表B中的项目

(E,F,G)

其中一项包含

中的项目

(A)

鉴于列表实际上是注册表项,因此可能存在大量注册表项,因此如果我选择使用传统的ForEach或For(int i ...)方法,我可以预见到巨大的性能开销。

如果他们能有效地完成工作,我不反对这些,但我更愿意使用Linq。

有没有人有任何想法?

我不关心相同的记录。

我已经创建了一个IEquatable<>类来比较元素,但是如何使用它来创建我正在努力的所需输出。

提前致谢。

顺便说一句,我使用VS2012和.NET 4.5

2 个答案:

答案 0 :(得分:19)

var A = new List<string>() { "A", "B", "C", "D" };
var B = new List<string>() { "A", "E", "F", "G" };

A.Except(B).ToList()
// outputs List<string>(2) { "B", "C", "D" }
B.Except(A).ToList()
// outputs List<string>(2) { "E", "F", "G" }
B.Intersect(A).ToList()
// outputs List<string>(2) { "A" }

答案 1 :(得分:5)

使用 LINQ

listA.Except(listB) 

这将为listA中的所有项目提供不在listB中的项目。

类似

listA.SequenceEqual(listB)