Zvyčajne používame Distinct v C# na deduplikáciu polí, všeobecné dátové typy založené na poliach, ako int, string. môže sa použiť aj na deduplikáciu objektov, pozrime sa na definíciu metódy Distinct v C#:
Je tam veľké zaťaženie, pridáva sa prvý parameter, ktorý je metóda rozťahovania, o metóde rozťahovania, prosím, Baidu pochop. Poďme študovať deduplikáciu objektov v Distinct, povedzme, že teraz máme triedu People:
Deklarujeme kolekciu objektov ListPeole:
Použime metódu Distinct na ListPeople bez akýchkoľvek parametrov a výsledok je nasledovný:
Je vidieť, že ak metóda Distinct nemá parametre, deduplikuje p, p1, p2 v množine objektov a neexistuje deduplikácia pre rôzne objekty s rovnakou hodnotou člena objektu. Teraz máme požiadavku, aby ľudia s rovnakým ID, ktorých počítame ako tá istá osoba, vypísali neduplikované osoby v množine (stačí vypísať jednu pre rovnaké ID), v tomto čase používame druhú metódu Distinct, ktorá vyžaduje, aby parametre zadané boli typu IEqualityComparer, zdedené generické rozhranie, pridávame nasledujúci kód:
Dedičstvom rozhrania IEqualityComparer musíte implementovať metódy Equals a GetHashCode. Pri porovnaní môžeme zadať entitu s PeopleCompareByID:
Výsledky jazdy sú nasledovné:
Dosiahli sme efekt deduplikácie pomocou ID. Teraz sa požiadavky opäť zmenili, ID a provincia sú tá istá osoba, na výstup informácií o osobe (tá istá môže vypísať podľa potreby), v tomto momente vidíme, že ID=0 a Provincia="Hubei" sú duplikované, na deduplikáciu máme inú triedu alebo dedíme z IEqualityComparer:
Podobne, pri použití metódy Distinct sa odosiela inštancia PeopleCompareByIDAndProvince:
Výsledky po behu sú nasledovné:
Dosiahli sme požadovaný efekt. Táto metóda sa môže použiť pri probléme deduplikácie s tromi alebo viacerými členmi objektu na určenie, či je objekt duplikovaný. Vyššie uvedené je môj skromný názor.
|