linq 检查存在于两个集合中的任何元素

r6hnlfcb  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(108)

我想知道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方法,但这不会产生整个交集吗?我只对检查两个集合是否相交感兴趣,产生整个集合似乎是一种浪费,特别是在较大的集合上。

jv4diomz

jv4diomz1#

听起来你只是想:

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

编辑:如注解中所述,Intersect使用延迟求值。它延迟 all 执行,直到从结果中读取第一个元素;此时,它将listB的 * 所有 * 加载到一个集合中,然后流式传输listA,直到它找到要产生的结果。此时,Any()将返回true,因此不再执行任何工作。请参阅我的Edulinq post on Intersect了解更多信息。

相关问题