Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check for any element that exists in two collections

I'm wondering if Linq has a method to check if two collections have at least a single element in common. I would expect something like this:

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

Does it exists in Linq or should I write a custom method for it?

I am aware of the Intersect method, but doesn't this yield the entire intersection set? I'm only interested in checking IF the two collection intersect, yielding the entire set seems like a waste, especially on larger collections.

like image 933
zeebonk Avatar asked Sep 25 '12 13:09

zeebonk


1 Answers

Sounds like you just want:

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

EDIT: As noted in comments, Intersect uses lazy evaluation. It defers all execution until the first element is read from the result; at that point it will load all of listB into a set, and then stream listA until it finds a result to yield. At that point, Any() will return true and so no more work will be done. See my Edulinq post on Intersect for more information.

like image 144
Jon Skeet Avatar answered Sep 29 '22 10:09

Jon Skeet