Skip to content

Innlegg

Samlingens sammenligner, finne forskjellene mellom to samlinger

22. juli 2019 • 2 min lesing

Samlingens sammenligner, finne forskjellene mellom to samlinger

Har du måttet sammenligne to samlinger og utføre logikk basert på om elementet er i kildesamlingen, i sammenligningssamlingen eller i begge? Ja, jeg også, jeg måtte slå sammen data fra brukergrensesnittet og databasen. Jeg kunne ikke finne en god løsning, så jeg skrev en samlingsammenligner.

For å illustrere hvordan dette fungerer, la oss se på et eksempel.

I kildedata har vi verdiene 1, 3, 4, 6, og i
sammenligningssamlingen har vi verdiene 1, 2, 3, 4, 5.

Kildedata mangler 2 og 5 når det sammenlignes med sammenligningssamlingen, og sammenligningssamlingen mangler 6 når det sammenlignes med kildesamlingen.

La oss gå gjennom denne sammenslåingen:

  1. i begge (oppdater)
  2. bare i sammenligningssamlingen (legg til i kilde)
  3. i begge (oppdater)
  4. i begge (oppdater)
  5. bare i sammenligningssamlingen (legg til i kilde)
  6. bare i kildesamlingen (fjern fra kilde)

Her er hvordan koden ser ut:

var source = new []{1, 3, 4, 6};
var collection = new[] {1, 2, 3, 4, 5};

source.CompareTo(collection, (s, d) => s == d)
    .OnlyInSourceCollection(s=> {/* do something */})
    .OnlyInComparingCollection(s=>{/* do something */})
    .InBoth(s=> {/*do something*/})
    .Process();

Hvorfor ikke bruke LINQ?

Du kan bruke LINQ, men LINQ vil iterere gjennom samlingene minst 3 ganger, noe som ikke inkluderer operasjoner (legge til, oppdatere og slette) på dataene. Ved å bruke CollectionComparer, blir dataene bare iterert to ganger.

Det finnes raskere måter å finne forskjellene på, for eksempel et binært søk, men et binært søk fungerer bare med heltall. Samlingsammenligningen støtter enhver type sammenligning. Sammenligningen er definert med denne koden: (s, d) => s == d.

Kildekoden finnes på GitHub.

Forfatter: Chuck Conway er en AI-ingeniør med nesten 30 års erfaring innen programvareutvikling. Han bygger praktiske AI-systemer—innholdspipelines, infrastrukturagenter og verktøy som løser virkelige problemer—og deler det han lærer underveis. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube og på SubStack.

↑ Tilbake til toppen

Du kan også like