>백엔드 개발 >C++ >IEnumerable.Intersect()를 사용하여 C#에서 여러 목록의 교차점을 효율적으로 찾는 방법은 무엇입니까?

IEnumerable.Intersect()를 사용하여 C#에서 여러 목록의 교차점을 효율적으로 찾는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-15 11:21:44739검색

How to Efficiently Find the Intersection of Multiple Lists in C# using IEnumerable.Intersect()?

IEnumerable.Intersect()를 사용하여 C#에서 여러 목록의 교차점을 효율적으로 찾습니다

데이터 분석 및 처리 분야에서 여러 목록의 교차점을 찾는 것은 매우 일반적인 작업입니다. 이 문제를 해결하는 방법은 여러 가지가 있지만 IEnumerable.Intersect() 메서드를 사용하는 것이 효율적인 솔루션을 제공합니다. 이 문서에서는 이 방법을 사용하여 여러 목록의 교집합을 식별하고 검색하는 방법을 살펴봅니다.

C#에서는 여러 시퀀스에 적용할 때 IEnumerable.Intersect() 메서드를 사용하여 모든 시퀀스에 공통된 요소를 가져올 수 있습니다. 이 방법을 사용하여 여러 목록의 교차점을 찾는 방법을 보려면 다음 예를 고려하세요.

<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 };

// 预期交集为 List<int>() { 3 };</code>

IEnumerable.Intersect()를 사용하여 이러한 목록의 교차점을 찾으려면 다음 방법을 활용할 수 있습니다.

<code class="language-csharp">var intersection = listOfLists
    .Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>

이 솔루션의 목적은 다음과 같습니다.

  1. 첫 번째 목록 건너뛰기: 먼저 Skip(1)을 사용하여 listOfLists의 첫 번째 목록을 건너뜁니다. 이는 두 번째 목록으로 집계 프로세스를 시작하는 데 필요합니다.
  2. Aggregation: 교차 결과를 누적하기 위해 Aggregate 방법을 사용합니다. 집계 함수는 시드 값과 각 후속 요소에서 실행될 함수라는 두 가지 매개 변수를 허용합니다.
  3. HashSet 생성: 첫 번째 목록에서 초기 교차점으로 HashSet을 생성합니다. HashSet은 중복 요소를 효과적으로 식별하고 빠른 교차 작업을 지원하기 때문에 사용됩니다.
  4. 각 목록과 교차: 각 후속 목록에 대해 HashSet에서 IntersectWith()를 호출합니다. 이 메서드는 HashSet과 현재 목록 모두에 공통적인 요소만 포함하도록 HashSet을 업데이트합니다.
  5. 교집합을 반환합니다. 모든 목록이 처리된 후 HashSet에는 모든 목록의 교집합이 포함됩니다. 이 HashSet을 교차점으로 반환합니다.

이 솔루션은 IEnumerable.Intersect()를 사용하여 여러 목록의 교차점을 찾는 간결하고 효율적인 방법을 제공합니다. HashSet의 최적화 기능을 활용하여 중복 요소를 처리하고 빠른 교차 작업을 수행합니다.

listOfLists에는 교차를 초기화할 목록이 항상 하나 이상 포함되어야 한다는 점에 유의하는 것이 중요합니다. 목록이 비어 있으면 ArgumentNullException이 발생합니다.

위 내용은 IEnumerable.Intersect()를 사용하여 C#에서 여러 목록의 교차점을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.