Maison > développement back-end > C++ > Comment puis-je fusionner deux listes d'objets personne à l'aide de LINQ, en gérant les doublons en combinant des valeurs et en calculant les modifications ?

Comment puis-je fusionner deux listes d'objets personne à l'aide de LINQ, en gérant les doublons en combinant des valeurs et en calculant les modifications ?

Mary-Kate Olsen
Libérer: 2025-01-01 06:54:11
original
641 Les gens l'ont consulté

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

Fusionner deux listes d'objets à l'aide de LINQ

Dans des scénarios tels que la gestion des données, vous pouvez rencontrer des situations dans lesquelles vous devez combiner plusieurs listes d'objets. Considérons un cas spécifique où nous avons deux listes d'objets Person :

<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;
Copier après la connexion

}

List< ;Personne> list1;
Liste list2;

Notre objectif est de fusionner ces deux listes en une nouvelle Liste. Lorsque la même personne existe dans les deux listes, nous devons combiner leurs valeurs lors du calcul du changement en soustrayant la valeur de la liste1 de la valeur de la liste2. Pour les personnes qui ne sont pas en double, le changement doit être nul.

Utilisation de la méthode Linq Union

Une approche simple pour fusionner ces listes consiste à utiliser la méthode d'extension Linq Union . Cette méthode combine les éléments de deux séquences et renvoie une nouvelle séquence. Par exemple :

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

Par défaut, la méthode Union utilise les méthodes Equals et GetHashCode de la classe Person pour déterminer les éléments en double. Cependant, si vous souhaitez comparer des personnes en fonction d'une propriété spécifique, telle que leur nom, vous pouvez remplacer ces méthodes dans la classe Person.

/// <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);
}
Copier après la connexion

Vous pouvez également créer une classe de comparaison qui implémente IEqualityComparer. interface pour définir vos propres critères de comparaison. Vous pouvez ensuite spécifier ce comparateur comme deuxième paramètre dans la méthode Union.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal