使用LINQ检查两个列表是否包含相同的数字

Jim*_*mbo 0 c# linq ienumerable

我想知道是否有更好的方法(仍然使用LINQ)实现以下内容,它检查这两者中的数字是否相同:

var list1 = new int[] { 1, 2, 3, 4 };
var list2 = new int[] { 2, 1, 3, 4 };

return list1.Intersect(list2).Count() == list2.Count();
Run Code Online (Sandbox Code Playgroud)

上面的例子将返回 true

Tim*_*ter 5

我会用两个HashSet<int>SetEquals方法:

var l1Lookup = new HashSet<int>(list1);
var l2Lookup = new HashSet<int>(list2);
bool containsSame = l1Lookup.SetEquals(l2Lookup);  // true
Run Code Online (Sandbox Code Playgroud)

SetEquals方法忽略重复条目和其他参数中元素的顺序.如果other表示的集合是具有与当前HashSet对象相同的相等比较器的HashSet集合,则此方法是O(n)操作.否则,此方法是O(n + m)操作,其中n是其他元素的数量,m是Count.

如果序列很大或/并且它们不是集合而是昂贵的查询,那么您的Count()方法可能效率低下.它也可能是不正确的,因为所有项目的计数不一定是交叉项目的计数,因为Intersect删除了重复项目.