Heim > Backend-Entwicklung > C++ > Wie kann ich zwei Objektlisten in C# mithilfe von LINQ zusammenführen, Duplikate verarbeiten und benutzerdefinierte Vergleiche durchführen?

Wie kann ich zwei Objektlisten in C# mithilfe von LINQ zusammenführen, Duplikate verarbeiten und benutzerdefinierte Vergleiche durchführen?

Patricia Arquette
Freigeben: 2025-01-01 10:24:11
Original
1008 Leute haben es durchsucht

How Can I Merge Two Lists of Objects in C# Using LINQ, Handling Duplicates and Custom Comparisons?

Objektlisten mit Linq zusammenführen

Das Kombinieren zweier Listen zu einer neuen Liste mit bestimmten Bedingungen kann mithilfe von LINQ-Erweiterungsmethoden erreicht werden. Betrachten wir das folgende Szenario:

class Person
{
    string Name;
    int Value;
    int Change;
}

List<Person> list1;
List<Person> list2;
Nach dem Login kopieren

Wir möchten eine neue Liste erstellen. das list1 und list2 kombiniert. Für identische Personen sollte der kombinierte Datensatz ihren Namen behalten, den Wert aus Liste2 verwenden und die Änderung als Differenz zwischen Werten aus beiden Listen berechnen.

Verwendung der Union-Methode

Die Union-Methode in LINQ bietet eine einfache Möglichkeit, zwei Listen zusammenzuführen und Duplikate zu entfernen. Zum Beispiel:

var mergedList = list1.Union(list2).ToList();
Nach dem Login kopieren

Dadurch wird eine neue zusammengeführte Liste erstellt, die sowohl Liste1 als auch Liste2 kombiniert, und alle doppelten Elemente werden ausgeschlossen.

Benutzerdefinierter Vergleich für Equals und GetHashCode

Wenn der Standardvergleich von Objekten basierend auf Equals und GetHashCode unsere Anforderungen nicht erfüllt, müssen wir diese überschreiben Methoden in der Person-Klasse. So machen Sie beispielsweise den Vergleich für die Name-Eigenschaft unabhängig von der Groß-/Kleinschreibung:

public override bool Equals(object obj)
{        
    var person = obj as Person;

    return Equals(person);
}

public override int GetHashCode()
{
    return Name.ToLower().GetHashCode();
}

public bool Equals(Person personToCompareTo)
{
    return Name.ToLower() == personToCompareTo.Name.ToLower();
}
Nach dem Login kopieren

Verwenden eines benutzerdefinierten Vergleichers

Alternativ können wir einen benutzerdefinierten Vergleicher definieren Klasse, die die IEqualityComparer-Schnittstelle implementiert. Dann können wir diesen Vergleicher zur Union-Methode als zweiten Parameter bereitstellen:

var comparer = new PersonComparer();
var mergedList = list1.Union(list2, comparer).ToList();
Nach dem Login kopieren

Weitere Informationen zu benutzerdefinierten Vergleichern finden Sie in der MSDN-Dokumentation.

Das obige ist der detaillierte Inhalt vonWie kann ich zwei Objektlisten in C# mithilfe von LINQ zusammenführen, Duplikate verarbeiten und benutzerdefinierte Vergleiche durchführen?. 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