>백엔드 개발 >C++ >C#에서 두 개의 사용자 지정 개체 목록 사이에서 고유한 요소를 효율적으로 찾을 수 있습니까?

C#에서 두 개의 사용자 지정 개체 목록 사이에서 고유한 요소를 효율적으로 찾을 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-23 01:05:12845검색

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

객체 비교를 사용자 정의하여 목록 차별화

사용자 정의 개체가 포함된 두 개의 일반 목록을 처리할 때 한 목록에서 고유한 요소(특히 다른 목록에 없는 요소)를 추출하는 것은 유용한 작업입니다.

.Except() 방법은 이에 대한 효율적인 솔루션을 제공합니다. 두 개의 목록 인수를 허용하고 첫 번째 목록에는 있지만 두 번째 목록에는 없는 항목이 포함된 새 목록을 반환합니다.

동일성 및 기본 비교 무시

사용자 정의 개체 유형이 Equals()GetHashCode() 메서드를 재정의하는 경우 다음과 같이 .Except()을 사용할 수 있습니다.

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>

이 경우 개체 비교는 재정의된 메서드에 의존합니다. 동등성 차이는 목록 간의 차이에 반영됩니다.

맞춤 동등 비교기

그러나 동등 기준에 맞춤 구현이 필요한 경우 직접 정의할 수 있습니다 IEqualityComparer<T>. ID를 비교 기준으로 사용하는 예는 다음과 같습니다.

<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}</code>

그런 다음 .Except()에서 다음을 통해 이 사용자 정의 비교기를 사용할 수 있습니다.

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>

이러한 맞춤 비교를 통해 .Except() 작업이 귀하의 특정 평등 요구 사항을 충족하는지 확인할 수 있습니다.

중복 유지

.Except()은 중복된 요소를 제외한다는 점에 주목할 필요가 있습니다. 중복된 항목을 유지해야 하는 경우 또 다른 방법은 두 번째 목록을 HashSet로 변환하고 다음을 사용하는 것입니다.

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>

이 방법은 중복 항목을 포함하여 결과 목록 list3의 모든 고유 요소를 유지합니다.

위 내용은 C#에서 두 개의 사용자 지정 개체 목록 사이에서 고유한 요소를 효율적으로 찾을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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