如何使用LINQ比较两个列表中的项目?

6

我有两个列表,其中一个有5个元素,另一个有4个元素。它们有一些相同的元素,但也有不同的元素。我想创建一个只包含它们不同元素的列表。怎么做呢?

注意:5个元素的列表是我的主要列表。


可能是Linq查找两个列表中的差异的重复问题。 - AakashM
2个回答

16

这个怎么样?

var list1 = new List<int>( new []{1,2,3,4,5});
var list2 = new List<int>( new []{1,3,4});
var list3 = list1.Except( list2);

在这种情况下,list3 将仅包含2和5。

编辑

如果你想获取两个集合中唯一的元素,以下代码应该足够:

var list1 = new List<int>( new []{1,2,3,4,5});
var list2 = new List<int>( new []{1,3,4,7});
var list3 = list1.Except(list2).Union(list2.Except(list1));

将输出2、5和7。


这并不是真正的集合差异 — 它仅排除了序列1中也在序列2中的项目。(它不会包括序列2中不在序列1中的项目。) - Paul Ruane
Jason在AakashM提供的问题评论链接中的答案提供了一种产生真正的双向集合差异的方法。 - Paul Ruane

1
如果你好奇,相反的术语被称为“Intersect”
string[] collection1 = new string[] { "1", "7", "4" };
string[] collection2 = new string[] { "6", "1", "7" };

var resultSet = collection1.Intersect<string>(collection2);

foreach (string s in resultSet)
{
    Console.WriteLine(s);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接