객체 비교를 사용자 정의하여 목록 차별화
사용자 정의 개체가 포함된 두 개의 일반 목록을 처리할 때 한 목록에서 고유한 요소(특히 다른 목록에 없는 요소)를 추출하는 것은 유용한 작업입니다.
.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!