Heim > Backend-Entwicklung > C++ > Wie kann ich eindeutige Elemente in einer Liste effizient finden, die in einer anderen nicht vorhanden sind?

Wie kann ich eindeutige Elemente in einer Liste effizient finden, die in einer anderen nicht vorhanden sind?

Susan Sarandon
Freigeben: 2025-01-23 00:29:13
Original
372 Leute haben es durchsucht

How Can I Efficiently Find Unique Elements in One List That Are Not in Another?

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:

var list3 = list1.Except(list2).ToList();
Nach dem Login kopieren

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:

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;
    }
}
Nach dem Login kopieren

Mit diesem benutzerdefinierten Komparator führt der folgende Code den gewünschten Vergleich durch:

var list3 = list1.Except(list2, new IdComparer()).ToList();
Nach dem Login kopieren

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:

var set2 = new HashSet<CustomObject>(list2);
var list3 = list1.Where(x => !set2.Contains(x)).ToList();
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage