Heim >Backend-Entwicklung >C++ >Wie kann ich eindeutige Elemente in einer Liste effizient finden, die in einer anderen nicht vorhanden sind?
Vergleichen Sie die Unterschiede zwischen zwei Listen
Beim Umgang mit zwei Listen mit benutzerdefinierten Objekten ist es häufig erforderlich, eindeutige Elemente in der ersten Liste zu identifizieren, die in der zweiten Liste nicht vorhanden sind. Dieses Problem kann mit der .Except()
-Methode effizient gelöst werden.
Betrachten Sie beispielsweise zwei Listen list1
und list2
, die beide Instanzen von CustomObject
enthalten. Um für list1
eindeutige Elemente zu extrahieren, verwenden Sie einfach den folgenden Code:
<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Bei diesem unkomplizierten Ansatz wird davon ausgegangen, dass der Typ CustomObject
die Methoden Equals()
und GetHashCode()
überschreibt, was korrekte Gleichheits- und Hash-Vergleiche ermöglicht.
Wenn jedoch ein detaillierterer Vergleich erforderlich ist, beispielsweise basierend auf einem bestimmten Attribut (z. B. einer ID), muss ein benutzerdefinierter Gleichheitsvergleicher implementiert werden. Wie unten gezeigt, erfordert dies die Definition einer Klasse, die die IEqualityComparer<T>
-Schnittstelle implementiert:
<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject> { public int GetHashCode(CustomObject co) { return co.Id.GetHashCode(); } public bool Equals(CustomObject x1, CustomObject x2) { return x1.Id == x2.Id; } }</code>
Mit diesem benutzerdefinierten Komparator führt der folgende Code den gewünschten Vergleich durch:
<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Es ist wichtig zu beachten, dass diese Methode alle doppelten Elemente im Ergebnis eliminiert. Wenn Duplikate erhalten bleiben müssen, ist eine alternative Strategie mit Mengen und einer where
-Klausel geeigneter:
<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2); var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Das obige ist der detaillierte Inhalt vonWie kann ich eindeutige Elemente in einer Liste effizient finden, die in einer anderen nicht vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!