Vanligvis bruker vi Distinct i C# for array-deduplisering, generelle array-baserte datatyper, som int, string. kan også brukes for objektdeduplisering, la oss se på C#s definisjon av Distink-metoden:
Det er en tung belastning, den første parameteren legges til, nemlig ekspansjonsmetoden, om ekspansjonsmetoden, vær så snill Baidu å forstå. La oss studere Disdincts objektdeduplisering, la oss si at vi nå har en People-klasse:
Vi erklærer en samling av ListPeole-objekter:
La oss bruke Distinkt-metoden på ListPeople uten noen parametere, og resultatet er som følger:
Det kan sees at hvis Distinkt-metoden ikke har parametere, vil den deduplisere p, p1, p2 i objektsettet, og det er ingen deduplisering for forskjellige objekter med samme medlemsverdi som objektet. Nå har vi et krav, for personer med samme ID, teller vi som samme person, for å skrive ut ikke-dupliserte personer i settet (bare send ut én for samme ID), på dette tidspunktet bruker vi den andre metoden Distinct, metoden krever at parameterne som sendes inn er av typen IEqualityComparer, og arver et generisk grensesnitt, vi legger til følgende kode:
Ved å arve IEqualityComparer-grensesnittet må du implementere metodene Equals og GetHashCode. Når vi sammenligner, kan vi sende inn en enhet med en PeopleCompareByID:
Resultatene av løpet er som følger:
Vi har oppnådd effekten av deduplisering ved ID. Nå har kravene endret seg igjen, ID-en og provinsen er samme person, for å gi ut personens informasjon (den samme kan sende ut én når som helst), på dette tidspunktet ser vi at ID=0 og Province="Hubei" dupliseres, for å deduplisere det har vi en annen klasse, eller arver fra IEqualityComparer:
På samme måte, når man bruker Disdifferent-metoden, sendes en instans av PeopleCompareByIDAndProvince:
Resultatene etter løp er som følger:
Vi oppnådde den effekten vi ønsket. Denne metoden kan brukes når man støter på problemet med deduplisering med tre eller flere objektmedlemmer for å avgjøre om objektet er duplisert. Ovenstående er min ydmyke mening.
|