我有两个清单:
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
答案 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)