查找list1中存在的所有整数,这些整数在list2中不存在,代码行数最少?

时间:2011-04-05 13:37:24

标签: c# list

假设我有两个整数列表:

List<int> list1 = new List<int> {1,2,3,4,5,6};
List<int> list2 = new List<int> {4,5,6,7,8,9};

找到list1中存在但不是list2的所有整数的最快方法是什么

我能想到的最简单的解决方案是从list1和list2创建一个联合列表,并从list2中存在的该联合中删除所有成员

Union = {1,2,3,4,5,6,7,8,9}
Union - list2 = {1,2,3} <- This is my desired result

但也许有一种更简单,更快速的代码方式来完成这项工作?

2 个答案:

答案 0 :(得分:7)

list1.Except(list2)(如果使用的是.NET 3.5)

答案 1 :(得分:2)

如果列表可能包含重复元素,并且您想要从list1返回任何重复项,那么您可以执行以下操作:

var tempSet = new HashSet<int>(list2);
var results = list1.Where(x => !tempSet.Contains(x));

如果list2只包含一些元素,那么您可以在不使用HashSet<T>的情况下离开:

var results = list1.Where(x => !list2.Contains(x));

虽然对于较大的集合,您会发现HashSet<T>将直接使用列表轻松胜出:Contains对于HashSet<T>是O(1)而对于任意{是{O} {1}}序列。