Skip to content

Beiträge

Der Collection Comparer, Unterschiede zwischen zwei Sammlungen finden

22. Juli 2019 • 2 min Lesezeit

Der Collection Comparer, Unterschiede zwischen zwei Sammlungen finden

Mussten Sie schon mal zwei Sammlungen vergleichen und eine Logik ausführen, je nachdem, ob sich das Element in der Quellsammlung, in der Vergleichssammlung oder in beiden befindet? Mir auch, ich musste Daten aus der Benutzeroberfläche und der Datenbank zusammenführen. Ich konnte keine gute Lösung finden, also schrieb ich einen Collection Comparer.

Um zu veranschaulichen, wie dies funktioniert, schauen wir uns ein Beispiel an.

In den Quelldaten haben wir die Werte 1, 3, 4, 6, und in der
Vergleichssammlung haben wir die Werte 1, 2, 3, 4, 5.

Den Quelldaten fehlen die 2 und die 5 im Vergleich zur Vergleichssammlung, und der Vergleichssammlung fehlt die 6 im Vergleich zur Quellsammlung.

Lassen Sie uns diese Zusammenführung durchgehen:

  1. in beiden (aktualisieren)
  2. nur in der Vergleichssammlung (zur Quelle hinzufügen)
  3. in beiden (aktualisieren)
  4. in beiden (aktualisieren)
  5. nur in der Vergleichssammlung (zur Quelle hinzufügen)
  6. nur in der Quellsammlung (aus der Quelle entfernen)

So sieht der Code aus:

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();

Warum nicht LINQ verwenden?

Sie können LINQ verwenden, aber LINQ iteriert die Sammlungen mindestens 3 Mal, was nicht das Operieren (Hinzufügen, Aktualisieren und Löschen) auf den Daten einschließt. Mit dem CollectionComparer werden die Daten nur zweimal iteriert.

Es gibt schnellere Möglichkeiten, um die Unterschiede zu finden, wie z. B. eine binäre Suche, aber eine binäre Suche funktioniert nur mit Ganzzahlen. Der Collection Comparer unterstützt jeden Vergleichstyp. Der Vergleich wird mit diesem Code definiert: (s, d) => s == d.

Der Quellcode befindet sich auf GitHub.

Autor: Chuck Conway ist ein KI-Ingenieur mit fast 30 Jahren Erfahrung in der Softwareentwicklung. Er entwickelt praktische KI-Systeme – Content-Pipelines, Infrastruktur-Agenten und Tools, die echte Probleme lösen – und teilt seine Erkenntnisse unterwegs. Verbinden Sie sich mit ihm in den sozialen Medien: X (@chuckconway) oder besuchen Sie ihn auf YouTube und auf SubStack.

↑ Nach oben

Das könnte dir auch gefallen