Vanligtvis använder vi Distinct i C# för arraydeduplicering, allmänna arraybaserade datatyper, såsom int, string, kan också användas för objektdeduplicering, låt oss titta på C#:s definition av Disdifferentie-metoden:
Det är en tung belastning, den första parametern läggs till, vilket är expansionsmetoden, om expansionsmetoden, snälla Baidu förstår. Låt oss studera Distincts objektdeduplicering, låt oss säga att vi nu har en People-klass:
Vi deklarerar en samling av ListPeole-objekt:
Låt oss använda Differentiatie-metoden på ListPeople utan några parametrar, och resultatet är följande:
Det kan ses att om Disdifferentie-metoden inte har parametrar, kommer den att dedupliclera p, p1, p2 i objektmängden, och det sker ingen deduplicering för olika objekt med samma medlemsvärde som objektet. Nu har vi ett krav, för personer med samma ID, räknar vi som samma person, att de icke-dubbletter personerna i mängden (bara mata ut en för samma ID), vid denna tidpunkt använder vi den andra metoden Distinct, metoden kräver att parametrarna som skickas in är av typen IEqualityComparer, och ärver ett generiskt gränssnitt, vi lägger till följande kod:
Genom att ärva IEqualityComparer-gränssnittet måste du implementera metoderna Equals och GetHashCode. När vi jämför kan vi passera in en enhet med ett PeopleCompareByID:
Resultaten av omgången är följande:
Vi har uppnått effekten av deduplicering via ID. Nu har kraven ändrats igen, ID och provins är samma person, för att exportera personens information (samma kan lämna ut en när som helst), vid denna tidpunkt ser vi att ID=0 och Province="Hubei" dupliceras, för att deduplicera det har vi en annan klass, eller ärva från IEqualityComparer:
På liknande sätt, när man använder Disisty-metoden, skickas en instans av PeopleCompareByIDAndProvince:
Resultaten efter löpning är följande:
Uppnådde den effekt vi ville ha. Denna metod kan användas vid problemet med deduplicering med tre eller fler objektmedlemmar för att avgöra om objektet är duplicerat. Ovanstående är min ödmjuka åsikt.
|