Heim > Backend-Entwicklung > C++ > Wie kann ich in C# effizient unterschiedliche Elemente zwischen zwei Listen benutzerdefinierter Objekte finden?

Wie kann ich in C# effizient unterschiedliche Elemente zwischen zwei Listen benutzerdefinierter Objekte finden?

Linda Hamilton
Freigeben: 2025-01-23 01:05:12
Original
830 Leute haben es durchsucht

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

Passen Sie den Objektvergleich an, um Listen zu unterscheiden

Beim Umgang mit zwei generischen Listen, die benutzerdefinierte Objekte enthalten, ist das Extrahieren eindeutiger Elemente in einer Liste (insbesondere derjenigen, die in der anderen Liste nicht vorhanden sind) ein nützlicher Vorgang.

Die Methode

.Except() bietet hierfür eine effiziente Lösung. Es akzeptiert zwei Listenargumente und gibt eine neue Liste zurück, die Elemente enthält, die in der ersten Liste enthalten sind, aber nicht in der zweiten Liste gefunden werden.

Gleichheit und Standardvergleich überschreiben

Wenn Ihr benutzerdefinierter Objekttyp die Methoden Equals() und GetHashCode() überschreibt, können Sie .Except() wie folgt verwenden:

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Nach dem Login kopieren

In diesem Fall basiert der Vergleich von Objekten auf ihren überschriebenen Methoden. Etwaige Gleichheitsunterschiede spiegeln sich in den Unterschieden zwischen den Listen wider.

Benutzerdefinierter Gleichheitskomparator

Wenn Ihr Gleichheitskriterium jedoch eine benutzerdefinierte Implementierung erfordert, können Sie Ihre eigene IEqualityComparer<T> definieren. Hier ist ein Beispiel für die Verwendung der ID als Vergleichsbasis:

<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}</code>
Nach dem Login kopieren

Sie können diesen benutzerdefinierten Komparator dann mit .Except() verwenden über:

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Nach dem Login kopieren

Dieser individuelle Vergleich stellt sicher, dass der .Except() Vorgang Ihren spezifischen Gleichstellungsanforderungen entspricht.

Duplikate behalten

Es ist erwähnenswert, dass .Except() doppelte Elemente ausschließt. Wenn Sie Duplikate behalten müssen, besteht eine andere Möglichkeit darin, die zweite Liste in HashSet umzuwandeln und Folgendes zu verwenden:

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Nach dem Login kopieren

Diese Methode behält alle eindeutigen Elemente in der resultierenden Liste bei list3, einschließlich Duplikaten.

Das obige ist der detaillierte Inhalt vonWie kann ich in C# effizient unterschiedliche Elemente zwischen zwei Listen benutzerdefinierter Objekte finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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