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
Susan SarandonOriginal
2025-01-23 00:29:13306Durchsuche

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:

<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!

Stellungnahme:
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