Подтвердить что ты не робот

Проверьте наличие любого элемента, который существует в двух коллекциях

Мне интересно, есть ли у 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, но не дает ли это всего набора пересечений? Меня интересует только проверка того, что две коллекции пересекаются, уступая весь набор, кажется пустой тратой, особенно в больших коллекциях.

4b9b3361

Ответ 1

Похоже, вы просто хотите:

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

EDIT: Как отмечено в комментариях, Intersect использует ленивую оценку. Он отменяет все выполнение до тех пор, пока первый элемент не будет считан из результата; в этот момент он загрузит все listB в набор, а затем поток listA, пока не найдет результат. В этот момент Any() вернет true, и поэтому больше не будет сделано никакой работы. Дополнительную информацию см. В разделе Edulinq post Intersect.