Обикновено използваме Distinct в C# за дедупликация на масиви, общи типове данни, базирани на масиви, като int, string. могат да се използват и за дедупликация на обекти, нека разгледаме дефиницията на метода Distinct в C#:
Има голямо натоварване, първият параметър се добавя, който е методът на разширение, относно метода на разширение, моля, Baidu, разберете. Нека изследваме дедупликацията на обекти в Different, да кажем, че сега имаме клас People:
Обявяваме колекция от ListPeole обекти:
Нека използваме метода Distinct в ListPeople без никакви параметри, и резултатът е следният:
Може да се види, че ако методът Distinct няма параметри, той ще дедуплира p, p1, p2 в множеството обекти и няма дедупликация за различни обекти с еднаква стойност на члена на обекта. Сега имаме изискване, за хората със същия ID, които броим като един и същ човек, да изведат недублиращите се хора в набора (просто изведем един за същия ID), в този момент използваме втория метод на Different, методът изисква параметрите, които се предават, да са от тип IEqualityComparer, наследявайки общ интерфейс, добавяме следния код:
Наследявайки интерфейса IEqualityComparer, трябва да реализирате методите Equals и GetHashCode. Когато сравняваме, можем да предадем обект с PeopleCompareByID:
Резултатите от бягането са следните:
Постигнахме ефекта на дедупликация чрез ID. Сега изискванията отново се промениха, ID и провинцията са един и същ човек, за да се изведе информацията на лицето (същото може да я издаде по желание), в момента виждаме, че ID=0 и провинция="Хубей" се дублират, за да ги дедупликатираме, имаме друг клас, или наследяване от IEqualityComparer:
По подобен начин, при използване на метода Different, се преминава инстанция на PeopleCompareByIDAndProvince:
Резултатите след бягане са следните:
Постигнахме желания ефект. Този метод може да се използва при среща с проблема с дедупликация при три или повече обектни елементи, за да се определи дали обектът е дублиран. Горното е моето скромно мнение.
|