15

我有两个清单:

List A {A, B, C, D}

List B {A, E, F, G}

我需要生成三个列表:

一个仅包含列表 A 中的项目

(乙、丙、丁)

一项仅包含列表 B 中的项目

(E, F, G)

一个包含两个项目

(一个)

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

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

有没有人有任何想法?

我不在乎相同的记录。

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

提前致谢。

顺便说一句,我正在使用 .NET 4.5 的 VS2012

4

2 回答 2

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" }
于 2013-08-07T09:12:38.103 回答
6

使用LINQ

listA.Except(listB) 

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

对于类似的

listA.SequenceEqual(listB)
于 2013-08-07T09:09:47.167 回答