Skip to content

Innlegg

Samlingssamenlikneren, Finne Forskjellene Mellom To Samlinger

22. juli 2019 • 2 min lesing

Samlingssamenlikneren, Finne Forskjellene Mellom To Samlinger

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

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

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

Kildedataene mangler 2 og 5 når de sammenlignes med sammenligningssamlingen, og sammenligningssamlingen mangler 6 når den 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=> {/* gjør noe */})
    .OnlyInComparingCollection(s=>{/* gjør noe */})
    .InBoth(s=> {/*gjør noe*/})
    .Process();

Hvorfor ikke bruke LINQ?

Du kan bruke LINQ, men LINQ vil iterere 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å, som binærsøk, men binærsøk fungerer bare med heltall. Samlingssamenlikneren støtter alle typer sammenligninger. Sammenligningen er definert med denne koden: (s, d) => s == d.

Kildekoden finnes på GitHub.

Forfatter: Chuck Conway spesialiserer seg på programvareutvikling og Generativ AI. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube.

↑ Tilbake til toppen

Du liker kanskje også