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

Ste*_*ood 14 linq list duplicates c#-4.0

我有两个清单:

List A {A, B, C, D}

List B {A, E, F, G}
Run Code Online (Sandbox Code Playgroud)

我需要制作三个列表:

一个只有列表A中的项目

(B,C,D)

一个只有列表B中的项目

(E,F,G)

一个与两个项目

(一个)

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

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

有没有人有任何想法?

我不关心相同的记录.

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

提前致谢.

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

Rom*_*kar 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" }
Run Code Online (Sandbox Code Playgroud)


Vai*_*ool 5

使用LINQ

listA.Except(listB) 
Run Code Online (Sandbox Code Playgroud)

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

对于类似的

listA.SequenceEqual(listB)
Run Code Online (Sandbox Code Playgroud)