Általában a Distinct (Distinct) funkciót használjuk C#-ban tömb-deduplikációhoz, általános tömbalapú adattípusokat, mint például int, string. objektum deduplikálásra is használható, nézzük meg C# Distinct metódus definícióját:
Nagy terhelés van, az első paraméter hozzáadódik, ami a bővítési módszer, a bővítési módszerről, kérem, Baidu értse meg. Tanulmányozzuk a Distinct objektum deduplikálását, tegyük fel, hogy most már van egy People osztályunk:
ListPeole tárgyak gyűjteményét nyilvánítjuk:
Használjuk a Distinct módszert a ListPeople menüben paraméter nélkül, és az eredmény a következő:
Látható, hogy ha a Distinct metódusnak nincs paramétere, akkor deduplikálja p, p1, p2 az objektumhalmazban, és nincs deduplikálás különböző objektumok esetében, amelyek ugyanaz a tagérték az objektum esetében. Most van egy követelmény, hogy azonos azonosítóval rendelkező személyek esetén ugyanazt a személyt számoljuk, hogy a halmazban lévő nem duplikált személyeket (csak egyet adjunk ki ugyanahhoz az ID-hez), jelenleg a Distinct második módszert használjuk, a módszer megköveteli, hogy a beadott paraméterek IEqualityComparer típusúak legyenek, egy általános interfészt örökölve, hozzáadjuk a következő kódot:
Az IEqualityComparer interfész öröklése után implementálnod kell az Equals és a GetHashCode metódusokat. Összehasonlításkor egy entitást is beadhatunk egy PeopleCompareByID-vel:
A futás eredményei a következők:
Elértük a deduplikálás hatását az azonosítás alapján. Most a követelmények ismét megváltoztak, az ID és a tartomány ugyanaz a személy, hogy a személy információit (ugyanaz a személy szabadon is kiadhatja), ekkor látjuk, hogy ID=0 és Province="Hubei" dnuklikáltak, deduplikálni akarjuk, van egy másik osztály, vagy örököljük az IEqualityComparer-től:
Hasonlóképpen, a Distinct módszer használatakor egy PeopleCompareByIDAndProvince példány kerül át:
A futás után az eredmények a következők:
Elértük azt a hatást, amit szerettünk volna. Ez a módszer akkor alkalmazható, amikor három vagy több objektumtaggal deduplikálás problémája merül fel, hogy megállapítsuk, az objektum duplikált-e. A fentiek az én szerény véleményem.
|