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

C#에서 여러 목록의 교차점을 효율적으로 찾는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-15 11:49:47
원래의
662명이 탐색했습니다.

How to Efficiently Find the Intersection of Multiple Lists in C#?

여러 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿