여러 C# 목록에서 공통 요소 확인
목록 모음이 있고 모든 목록에 있는 요소를 식별해야 한다고 가정해 보세요. 예를 들면 다음과 같습니다.
<code class="language-csharp">var list1 = new List<int>() { 1, 2, 3 }; var list2 = new List<int>() { 2, 3, 4 }; var list3 = new List<int>() { 3, 4, 5 }; var listOfLists = new List<List<int>>() { list1, list2, list3 };</code>
원하는 결과는 세 목록 모두에 공통적인 요소만 포함하는 목록입니다: {3}
.
목록 누산기로 IEnumerable.Intersect()
활용
한 가지 효과적인 방법은 누산기 역할을 하는 목록과 함께 IEnumerable.Intersect()
을 반복적으로 사용하는 것입니다.
<code class="language-csharp">var intersection = listOfLists.Skip(1) .Aggregate( new List<int>(listOfLists.First()), (list, subList) => list.Intersect(subList).ToList() );</code>
이 코드는 첫 번째 목록에서 시작하여 각 후속 목록과 반복적으로 교차합니다.
HashSet Accumulator를 사용하여 IEnumerable.Intersect()
사용
보다 효율적인 접근 방식은 최적화된 교차 기능으로 인해 HashSet
를 누산기로 활용합니다.
<code class="language-csharp">var intersection = listOfLists.Skip(1) .Aggregate( new HashSet<int>(listOfLists.First()), (h, e) => { h.IntersectWith(e); return h; } );</code>
이 버전은 세트에 대해 더욱 효율적인 작업인 IntersectWith()
을 사용합니다. 이 기능이 올바르게 작동하려면 listOfLists
에 목록이 하나 이상 포함되어 있어야 합니다.
두 기술 모두 IEnumerable.Intersect()
를 사용하여 여러 목록의 교차점을 찾는 효율적인 방법을 제공합니다. HashSet
방법은 일반적으로 대규모 데이터 세트를 처리할 때 성능 이점 때문에 선호됩니다.
위 내용은 C#에서 여러 목록의 교차점을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!