我想知道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方法,但这不会产生整个交集吗?我只对检查两个集合是否相交感兴趣,产生整个集合似乎是一种浪费,特别是在较大的集合上。
答案 0 :(得分:68)
听起来你只是想要:
bool hasSameElements = listA.Intersect(listB).Any();
编辑:正如评论中所述,Intersect
使用延迟评估。它推迟所有执行,直到从结果中读取第一个元素为止;此时,它会将 listB
的所有加载到一个集合中,然后流listA
直到找到要生成的结果。此时,Any()
将返回true
,因此不会再进行任何工作。有关详细信息,请参阅我的Edulinq post on Intersect
。