50

我想知道 Linq 是否有一种方法来检查两个集合是否至少有一个共同的元素。我会期待这样的事情:

var listA = new List<int>() { some numbers };
var listB = new List<int>() { some numbers, potentially also in list A };

bool hasSameElements = listA.hasMatchingElements(listB);

它是否存在于 Linq 中,还是我应该为它编写自定义方法?

我知道 Intersect 方法,但这不会产生整个相交集吗?我只对检查两个集合是否相交感兴趣,产生整个集合似乎是一种浪费,尤其是在较大的集合上。

4

1 回答 1

106

听起来你只是想要:

bool hasSameElements = listA.Intersect(listB).Any();

编辑:如评论中所述,Intersect使用惰性评估。它推迟所有执行,直到从结果中读取第一个元素;那时它会将所有内容加载listB到一个集合中,然后流式传输listA,直到找到要产生的结果。届时,Any()将返回true,因此将不再进行任何工作。有关更多信息,请参阅我的Edulinq 帖子。Intersect

于 2012-09-25T13:40:08.913 回答