Yleensä käytämme Distinctia C#:ssa taulukon deduplikaatioon, yleisiin taulukkopohjaisiin tietotyyppeihin, kuten int, string. voidaan käyttää myös objektin deduplikaatioon, katsotaanpa C#:n määritelmää Distinct-metodille:
Kuorma on raskas, ensimmäinen parametri lisätään tämä, joka on laajennusmenetelmä, laajennusmenetelmästä, ymmärräthän Baidu. Tutkitaan Distinctin objektien deduplikaatiota, sanotaan, että meillä on nyt People-luokka:
Julistamme kokoelman ListPeole-esineitä:
Käytetään Distinct-menetelmää ListPeople-sivustolla ilman parametreja, ja tulos on seuraava:
On havaittavissa, että jos Distinct-metodilla ei ole parametreja, se deduplicatoi p, p1, p2 objektijoukossa, eikä eri olioille, joilla on sama jäsenarvo, deduplikaatiota ei tapahdu. Nyt meillä on vaatimus, että henkilöille, joilla on sama ID, lasketaan samaksi henkilöksi, että joukon ei-dlikoidut henkilöt (vain yksi sama ID), tällä hetkellä käytämme toista Distinct-menetelmää, joka vaatii, että syötetyt parametrit ovat tyyppiä IEqualityComparer, perimme geneerisen rajapinnan, lisäämme seuraavan koodin:
Perimällä IEqualityComparer-rajapinnan sinun täytyy toteuttaa Equals- ja GetHashCode-metodit. Kun vertailemme, voimme välittää entiteettiä, jolla on PeopleCompareByID:
Suorituksen tulokset ovat seuraavat:
Olemme saavuttaneet identiteetin deduplikoinnin vaikutuksen. Nyt vaatimukset ovat muuttuneet jälleen, ID ja provinssi ovat sama henkilö, jotta voi tuottaa henkilön tiedot (sama voi tuottaa yhden vapaasti), tällä hetkellä näemme, että ID=0 ja Province="Hubei" on kopioitu, deduplicatoimiseksi meillä on toinen luokka tai peritään IEqualityComparerilta:
Vastaavasti, kun käytetään Distinct-menetelmää, PeopleCompareByIDAndProvince -instanssi ohitetaan seuraavasti:
Tulokset juoksun jälkeen ovat seuraavat:
Saavutimme haluamamme vaikutuksen. Tätä menetelmää voidaan käyttää, kun kohtaamme deduplikaatio-ongelman, jossa on kolme tai useampi objektijäsen, jotta voidaan selvittää, onko objekti kopioitu. Yllä oleva on vaatimaton mielipiteeni.
|