Heim > Backend-Entwicklung > C++ > Wie kann ich zwei Listen von Personenobjekten mithilfe von LINQ zusammenführen, Duplikate durch Kombinieren von Werten und Berechnen von Änderungen verarbeiten?

Wie kann ich zwei Listen von Personenobjekten mithilfe von LINQ zusammenführen, Duplikate durch Kombinieren von Werten und Berechnen von Änderungen verarbeiten?

Mary-Kate Olsen
Freigeben: 2025-01-01 06:54:11
Original
612 Leute haben es durchsucht

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

Zwei Objektlisten mit LINQ zusammenführen

In Szenarien wie der Datenverwaltung kann es vorkommen, dass Sie mehrere Objektlisten kombinieren müssen. Betrachten wir einen bestimmten Fall, in dem wir zwei Listen von Person-Objekten haben:

<br>class Person<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">string Name;
int Value;
int Change;
Nach dem Login kopieren

}

List< ;Person> list1;
Liste list2;

Unser Ziel ist es, diese beiden Listen zu einer neuen Liste zusammenzuführen. Wenn in beiden Listen dieselbe Person vorhanden ist, müssen wir ihre Werte kombinieren und gleichzeitig die Änderung berechnen, indem wir den Wert in Liste1 vom Wert in Liste2 subtrahieren. Für nicht doppelte Personen sollte die Änderung Null sein.

Verwendung der Linq-Union-Methode

Ein einfacher Ansatz zum Zusammenführen dieser Listen ist die Verwendung der Linq-Erweiterungsmethode Union . Diese Methode kombiniert die Elemente zweier Sequenzen und gibt eine neue Sequenz zurück. Zum Beispiel:

<br>var mergedList = list1.Union(list2).ToList();<br>

Standardmäßig die Union-Methode verwendet die Methoden Equals und GetHashCode der Person-Klasse, um doppelte Elemente zu ermitteln. Wenn Sie jedoch Personen anhand einer bestimmten Eigenschaft, beispielsweise ihres Namens, vergleichen möchten, können Sie diese Methoden in der Person-Klasse überschreiben.

/// <summary>
/// Checks if the provided object is equal to the current Person
/// </summary>
/// <param name="obj">Object to compare to the current Person</param>
/// <returns>True if equal, false if not</returns>
public override bool Equals(object obj)
{
    // Try to cast the object to compare to to be a Person
    var person = obj as Person;

    return Equals(person);
}

/// <summary>
/// Returns an identifier for this instance
/// </summary>
public override int GetHashCode()
{
    return Name.GetHashCode();
}

/// <summary>
/// Checks if the provided Person is equal to the current Person
/// </summary>
/// <param name="personToCompareTo">Person to compare to the current person</param>
/// <returns>True if equal, false if not</returns>
public bool Equals(Person personToCompareTo)
{
    // Check if person is being compared to a non person. In that case always return false.
    if (personToCompareTo == null) return false;

    // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false.
    if (string.IsNullOrEmpty(personToCompareTo.Name) return false;

    // Check if both person objects contain the same Name. In that case they're assumed equal.
    return Name.Equals(personToCompareTo.Name);
}
Nach dem Login kopieren

Alternativ können Sie eine Vergleichsklasse erstellen, die den IEqualityComparer implementiert Schnittstelle zur Definition eigener Vergleichskriterien. Diesen Vergleicher können Sie dann als zweiten Parameter in der Union-Methode angeben.

Das obige ist der detaillierte Inhalt vonWie kann ich zwei Listen von Personenobjekten mithilfe von LINQ zusammenführen, Duplikate durch Kombinieren von Werten und Berechnen von Änderungen verarbeiten?. 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 Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage