检查两个集合中是否存在任何元素

zee*_*onk 35 c# linq collections

我想知道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);
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 75

听起来你只是想要:

bool hasSameElements = listA.Intersect(listB).Any();
Run Code Online (Sandbox Code Playgroud)

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

  • @zeebonk不,它没有.一旦返回单个项目,"Any"将立即停止(除非整个集合没有项目)并且Intersect使用延迟执行,因此它会在每个项目遇到它时吐出.这将是非常高效的. (10认同)