Обычно мы используем Distinct в C# для дедупликации массивов, общие типы данных на основе массивов, такие как int, string. Также можно использовать для дедупликации объектов, давайте рассмотрим определение метода Distinct в C#:
Есть большая нагрузка, добавляется первый параметр — это метод расширения, что касается метода расширения, пожалуйста, Baidu, поймите. Давайте изучим дедупликацию объектов в Distinct, допустим, теперь у нас есть класс Люди:
Мы объявляем коллекцию объектов ListPeole:
Давайте используем метод Distinct на ListPeople без каких-либо параметров, и результат такой:
Можно увидеть, что если метод Distinct не имеет параметров, он будет дедупликацией p, p1, p2 в наборе объектов, и дедупликация для разных объектов с одним и тем же значением элемента не происходит. Теперь у нас есть требование: для людей с одинаковым идентификатором, которые мы считаем одним и тем же человеком, чтобы вывести недублирующихся людей из множества (просто вывести одного для того же идентификатора). В этот момент мы используем второй метод Distinct, который требует, чтобы переданные параметры были типа IEqualityComparer, наследуя универсальный интерфейс, добавляем следующий код:
Наследуя интерфейс IEqualityComparer, необходимо реализовать методы Equals и GetHashCode. При сравнении мы можем передать сущность с PeopleCompareByID:
Результаты запуска следующие:
Мы добились эффекта дедупликации с помощью ID. Теперь требования снова изменились: ID и провинция — это один и тот же человек, чтобы выводить информацию о человеке (тот же может вывести её по желанию), сейчас мы видим, что ID=0 и Province="Hubei" дублированы, чтобы их дедупликация, у нас есть другой класс или наследование от IEqualityComparer:
Аналогично, при использовании метода Distinct проходит экземпляр PeopleCompareByIDAndProvince:
Результаты после забега следующие:
Добились желаемого эффекта. Этот метод можно использовать при возникновении проблемы дедупликации с тремя и более элементами объекта, чтобы определить, дублируется ли объект. Вышеизложенное — моё скромное мнение.
|