두 컬렉션에 적어도 하나의 요소가 공통으로 있는지 확인하는 방법이 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에 존재합니까, 아니면 그것을위한 커스텀 메소드를 작성해야합니까?
나는 교차 방법을 알고 있지만 교차 세트 전체가 나오지 않습니까? 나는 두 컬렉션이 교차하는지 검사하는 것에 만 관심이 있습니다. 전체 세트를 얻는 것은 특히 큰 컬렉션에서 낭비처럼 보입니다.
bool hasSameElements = listA.Intersect(listB).Any();
편집 : 코멘트에 언급 한 바와 같이, Intersect
게으른 평가를 사용
'인터 섹트 (Intersect) '는 요청 된만큼 많은 원소를 산출합니다. 'Any' 또는'FirstOrDefault'를 사용하거나'foreach'를 수행하고 첫 번째 반복을 중단하면 두 목록에 존재하는 _first_ 요소 만 찾을 수 있습니다. 나머지는 찾는다. – Rawling
Howver,'Intersect' 연산은 첫 번째 요소가 나오기 전에 두 시퀀스 중 _one_가 _ 완전하게 읽혀 지도록 요구합니다. 입력 중 하나가 무한하다면, 완전히 소모 된 입력이 아닌지 확인하십시오. 참고로 [인터셉트]가 어떻게 작동하는지에 대한 [사양] (http://msdn.microsoft.com/en-us/library/bb460136.aspx)을 참고하십시오. – Rawling