Običajno uporabljamo Distinct v C# za deduplikacijo polj, splošne podatkovne tipe na osnovi polj, kot so int, string. lahko se uporablja tudi za deduplikacijo objektov, poglejmo C#-jevo definicijo metode Distinct:
Obstaja velika obremenitev, prvi parameter se doda, to je metoda raztezanja, o metodi razširitve, prosim, Baidu razume. Preučimo Distinctovo deduplikacijo objektov, recimo, da imamo zdaj razred People:
Deklariramo zbirko objektov ListPeole:
Uporabimo metodo Distinct na ListPeople brez parametrov, rezultat pa je naslednji:
Vidimo lahko, da če metoda Distinct nima parametrov, bo deduplikirala p, p1, p2 v množici objektov in ni deduplikacije za različne objekte z enako vrednostjo člana objekta. Zdaj imamo zahtevo, da ljudje z istim ID-jem, ki jih štejemo kot ista oseba, izpišejo ne-podvojene osebe v množici (preprosto izpišemo eno za isti ID), v tem času uporabimo drugo metodo Distinct, ki zahteva, da so parametri, ki jih prenesemo, tipa IEqualityComparer, podedujejo generični vmesnik, dodamo naslednjo kodo:
Z dedovanjem vmesnika IEqualityComparer morate implementirati metode Equals in GetHashCode. Ko primerjamo, lahko dodamo entiteto z PeopleCompareByID:
Rezultati vožnje so naslednji:
Dosegli smo učinek deduplikacije z ID. Zdaj so se zahteve spet spremenile, ID in provinca sta ista oseba, da izpiše podatke o osebi (ista lahko izpiše podatke po želji), v tem trenutku vidimo, da sta ID=0 in Provinca="Hubei" podvojena, za deduplikacijo imamo še en razred ali podedujemo iz IEqualityComparerja:
Podobno se pri uporabi metode Distinct posreduje instanca PeopleCompareByIDAndProvince:
Rezultati po teku so naslednji:
Dosegli smo želeni učinek. Ta metoda se lahko uporabi pri problemu deduplikacije s tremi ali več člani objekta, da se ugotovi, ali je objekt podvojen. Zgornje je moje skromno mnenje.
|