Зазвичай ми використовуємо Distinct у C# для дедуплікації масивів, загальних типів даних на основі масивів, таких як int, рядок. Також можна використовувати для дедуплікації об'єктів, давайте розглянемо визначення методу Distinct у C#:
Є велике навантаження, перший параметр додається — це метод розширення, щодо методу розширення, будь ласка, Baidu, зрозумійте. Давайте вивчаємо дедуплікацію об'єктів у Different, припустимо, тепер у нас є клас People:
Ми декларуємо колекцію об'єктів ListPeole:
Давайте використаємо метод Distinct на ListPeople без жодних параметрів, і результат такий:
Можна побачити, що якщо метод Distinct не має параметрів, він дедуплікує p, p1, p2 у множині об'єктів, і немає дедуплікації для різних об'єктів з однаковим значенням члена об'єкта. Тепер у нас є вимога: для людей з однаковим ID, які ми рахуємо як одну й ту саму особу, щоб вивести недублованих осіб у множині (просто вивести одного для того ж ID), на цьому етапі ми використовуємо другий метод Different, метод вимагає, щоб параметри, передані в типі IEqualityComparer, успадковуючи загальний інтерфейс, додаємо наступний код:
Успадкувавши інтерфейс IEqualityComparer, потрібно реалізувати методи Equals і GetHashCode. Коли ми порівнюємо, ми можемо передати сутність із PeopleCompareByID:
Результати забігу такі:
Ми досягли ефекту дедуплікації за допомогою ID. Тепер вимоги знову змінилися: ID і провінція — це одна й та сама особа, щоб вивести інформацію про цю особу (той самий може виводити її за бажанням), зараз ми бачимо, що ID=0 і Province="Hubei" дубльовані, для дедуплікації ми маємо інший клас або успадковують від IEqualityComparer:
Аналогічно, при використанні методу Distinct, передається інстанс PeopleCompareByIDAndProvince:
Результати після бігу такі:
Досягли бажаного ефекту. Цей метод можна використовувати при виникненні проблеми дедуплікації трьох або більше елементів об'єкта, щоб визначити, чи є об'єкт дубльованим. Вищезазначене — моя скромна думка.
|