Tavaliselt kasutame C#-s Distinct'i massiivi deduplikeerimise jaoks, üldised massiivipõhised andmetüübid, nagu int, string. võib kasutada ka objekti duplikeerimise jaoks, vaatame C# definitsiooni Distinct meetodile:
Koormus on suur, esimene parameeter lisatakse see, mis on laiendusmeetod, laiendamismeetodi kohta, palun Baidu mõista. Uurime Distincti objektide deduplikeerimist, oletame, et meil on nüüd People klass:
Kuulutame välja ListPeole'i objektide kogumi:
Kasutame Distinct meetodit ListPeople'is ilma parameetriteta ja tulemus on järgmine:
On näha, et kui Distinct meetodil pole parameetreid, dedreplikeerib see objektide hulgas p, p1, p2 ning erinevatel objektidel, millel on sama liikmeväärtus, deduplikaati ei toimu. Nüüd on meil nõue, et sama ID-ga inimeste puhul, loeme sama inimesena, et nad väljastaksid hulga mitte-dreplikaatsed inimesed (lihtsalt väljasta üks sama ID jaoks), praegu kasutame teist meetodit Distinct, meetod nõuab, et sisestatud parameetrid oleksid tüüpi IEqualityComparer, pärides üldise liidese, lisame järgmise koodi:
IEqualityComparer liidese pärimisel pead rakendama Equals ja GetHashCode meetodid. Kui võrdleme, saame sisestada üksuse, millel on PeopleCompareByID:
Jooksu tulemused on järgmised:
Oleme saavutanud identifitseeriva dedluplikatsiooni efekti. Nüüd on nõuded jälle muutunud, ID ja provints on sama isik, et väljastada isiku info (sama võib väljundit anda soovi korral), sel hetkel näeme, et ID=0 ja Province="Hubei" on dubleeritud, dedlikeerimiseks on meil teine klass või pärime IEqualityComparerilt:
Samamoodi, kui kasutatakse Distinct meetodit, läbitakse PeopleCompareByIDAndProvince eksemplar:
Tulemused pärast jooksu on järgmised:
Saavutasime soovitud efekti. Seda meetodit saab kasutada, kui esineb kolme või enama objektiliikme dedlikeerimise probleem, et määrata, kas objekt on dubleeritud. Eelnev on minu tagasihoidlik arvamus.
|