이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 24681|회답: 1

[출처] C# Distinct는 조건부 객체를 중복 제거합니다

[링크 복사]
게시됨 2018. 8. 17. 오전 10:56:00 | | | |
보통 우리는 배열 중복 제거에 Distinct를 사용합니다. 일반적인 배열 기반 데이터 타입(예: int, string)을 사용합니다. 객체 중복 제거에도 사용할 수 있습니다. C#의 Distinct 메서드 정의를 살펴보겠습니다:



무거운 부하가 있습니다. 첫 번째 매개변수가 추가되었는데, 이것이 확장 방식입니다. 확장 방법에 대해 바이두가 이해해 주세요.
Distinct의 객체 중복 제거를 연구해 봅시다. 이제 People 클래스가 있다고 가정해 봅시다:




ListPeole 객체들의 집합을 선언합니다:

매개변수 없이 ListPeople에 Distinct 방법을 사용해 보면, 결과는 다음과 같습니다:



Distinct 메서드에 매개변수가 없으면 객체 집합 내에서 p, p1, p2를 중복 제거하고, 동일한 구성원 값을 가진 서로 다른 객체에 대한 중복 제거가 이루어지지 않는다는 것을 알 수 있습니다.
이제 동일한 ID를 가진 사람들에 대해, 동일한 사람으로 간주하여 집합 내에서 중복되지 않은 사람을 출력해야 한다는 요구사항이 있습니다(동일한 ID에 대해 한 명만 출력합니다). 이 시점에는 Distinct라는 두 번째 방법을 사용합니다. 이 메서드는 전달되는 매개변수가 IEqualityComparer 타입이어야 하며, 일반적인 인터페이스를 계승하여 다음과 같은 코드를 추가합니다:


IEqualityComparer 인터페이스를 계승하여 Equals와 GetHashCode 메서드를 구현해야 합니다.
비교할 때, PeopleCompareByID가 있는 엔터티를 통과시킬 수 있습니다:


이번 경기의 결과는 다음과 같습니다:



우리는 ID에 의한 중복 제거 효과를 달성했습니다.
이제 요구사항이 다시 변경되었는데, ID와 성은 동일 인물입니다. 사람의 정보를 출력하려면 동일 인물(동일 인원이 원할 때 출력할 수 있음)입니다. 이 시점에서 ID=0과 Province="Hubei"가 중복되어 있음을 알 수 있습니다. 이를 중복 제거하려면 다른 클래스가 있거나 IEqualityComparer에서 상속받은 클래스가 있습니다:


마찬가지로, Distinct 방법을 사용할 때는 PeopleCompareByIDAndProvince의 인스턴스가 전달됩니다:

달리기 후 결과는 다음과 같습니다:



우리가 원했던 효과를 얻었죠.
이 방법은 3개 이상의 객체 구성원이 있는 중복 제거 문제를 겪을 때 객체가 중복되었는지 확인할 수 있습니다.
위 내용은 제 겸손한 의견입니다.






이전의:MYSQL:WARN: Establishing SSL connection without server's identity verificatio...
다음:C# 딥 다이브 - 디스트럭터
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com