Heim >Backend-Entwicklung >C++ >Wie kann ich mit .Except() und IEqualityComparer effizient den Unterschied zwischen zwei Listen in C# finden?
Vergleichen und Identifizieren von Unterschieden zwischen C#-Listen
Die effiziente Bestimmung der Unterschiede zwischen zwei Listen ist eine häufige Aufgabe in der C#-Programmierung. Die .Except()
-Methode bietet eine leistungsstarke Lösung, ihre Anwendung kann jedoch nuanciert werden, insbesondere bei der Arbeit mit benutzerdefinierten Objekten.
Verwendung von .Except()
mit Referenztypgleichheit
Für benutzerdefinierte Objekte (z. B. CustomObjects
), die die Methoden Equals()
und GetHashCode()
korrekt überschreiben, ist die Verwendung von .Except()
unkompliziert:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Dadurch wird list3
erstellt, das Elemente aus list1
enthält, die nicht in list2
enthalten sind.
Benutzerdefinierter Gleichheitsvergleich mit IEqualityComparer
Komplexere Gleichheitsprüfungen, wie z. B. Vergleiche basierend auf einer bestimmten Eigenschaft (wie Id
), erfordern die Implementierung der IEqualityComparer<T>
-Schnittstelle. Hier ist ein Beispiel:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) => co.Id.GetHashCode(); public bool Equals(CustomObject x1, CustomObject x2) => x1.Id == x2.Id; }</code>
Dann verwenden Sie diesen Vergleicher mit .Except()
:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Umgang mit doppelten Elementen
Der Standard .Except()
entfernt Duplikate. Um sie zu bewahren, verwenden Sie diese Alternative:
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Dadurch wird ein HashSet
für eine effiziente Mitgliedschaftsprüfung genutzt, was dazu führt, dass list3
Duplikate beibehalten werden. Beachten Sie, dass die Reihenfolge der Elemente in list3
vom Original list1
abweichen kann.
Das obige ist der detaillierte Inhalt vonWie kann ich mit .Except() und IEqualityComparer effizient den Unterschied zwischen zwei Listen in C# finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!