Heim >Backend-Entwicklung >C++ >Wie führe ich zwei Listen von Personenobjekten mithilfe von LINQ zusammen und verarbeite Attributaktualisierungen basierend auf der Namensübereinstimmung?

Wie führe ich zwei Listen von Personenobjekten mithilfe von LINQ zusammen und verarbeite Attributaktualisierungen basierend auf der Namensübereinstimmung?

Susan Sarandon
Susan SarandonOriginal
2024-12-26 19:04:13580Durchsuche

How to Merge Two Lists of Person Objects Using LINQ and Handle Attribute Updates Based on Name Matching?

Erstellen Sie eine Liste aus zwei Objektlisten mit Linq

Stellen Sie sich das folgende Szenario vor:

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

List<Person> list1;
List<Person> list2;

Das Ziel ist um die beiden Listen zu einer neuen Liste zusammenzufassen. Wenn sich der kombinierte Datensatz auf dieselbe Person bezieht, sollten seine Attribute wie folgt übereinstimmen: Der Name sollte übereinstimmen, der Wert sollte den der Person in Liste2 widerspiegeln und die Änderung sollte dem Wert in Liste2 minus dem Wert in Liste1 entsprechen. Andernfalls sollte die Änderung 0 sein.

Lösung:

Die Linq-Methode Union eignet sich perfekt für diese Aufgabe:

var mergedList = list1.Union(list2).ToList();

Dies Der Vorgang führt die beiden Listen zusammen und entfernt Duplikate. Standardmäßig werden die in der Person-Klasse definierten Methoden Equals und GetHashCode aufgerufen. Wenn diese Methoden jedoch nicht überschrieben werden, können sie unsere benutzerdefinierten Objekte möglicherweise nicht effektiv vergleichen (z. B. mithilfe der Name-Eigenschaft zum Vergleich).

Equals und GetHashCode überschreiben:

Um genaue Vergleiche nach Namen zu gewährleisten, überschreiben Sie die Methoden wie folgt:

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

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

public bool Equals(Person personToCompareTo)
{
    if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name))
        return false;

    return Name.Equals(personToCompareTo.Name);
}

Benutzerdefiniert Vergleicher:

Alternativ können Sie einen benutzerdefinierten Vergleicher erstellen, der die IEqualityComparer-Schnittstelle implementiert. Dieser Vergleicher kann als zweites Argument für die Union-Methode bereitgestellt werden. Weitere Informationen zu benutzerdefinierten Vergleichern finden Sie hier: http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.

Das obige ist der detaillierte Inhalt vonWie führe ich zwei Listen von Personenobjekten mithilfe von LINQ zusammen und verarbeite Attributaktualisierungen basierend auf der Namensübereinstimmung?. 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