假设我有两个整数列表:
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
但也许有一种更简单,更快速的代码方式来完成这项工作?
答案 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}}序列。