Maison > développement back-end > C++ > Comment fusionner deux listes d'objets personne à l'aide de LINQ et gérer les mises à jour d'attributs en fonction de la correspondance de noms ?

Comment fusionner deux listes d'objets personne à l'aide de LINQ et gérer les mises à jour d'attributs en fonction de la correspondance de noms ?

Susan Sarandon
Libérer: 2024-12-26 19:04:13
original
496 Les gens l'ont consulté

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

Créer une liste à partir de deux listes d'objets avec Linq

Considérez le scénario suivant :

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

List<Person> list1;
List<Person> list2;
Copier après la connexion

L'objectif est pour combiner les deux listes dans une nouvelle Liste. Si l'enregistrement combiné concerne la même personne, ses attributs doivent s'aligner comme suit : le nom doit correspondre, la valeur doit refléter celle de la personne dans la liste2 et la modification doit être la valeur dans la liste2 moins la valeur dans la liste1. Sinon, le changement devrait être 0.

Solution :

La méthode Linq Union convient parfaitement à cette tâche :

var mergedList = list1.Union(list2).ToList();
Copier après la connexion

Ceci L'opération fusionne les deux listes, supprimant les doublons. Par défaut, il invoquera les méthodes Equals et GetHashCode définies dans la classe Person. Cependant, si ces méthodes ne sont pas remplacées, elles risquent de ne pas comparer efficacement nos objets personnalisés (par exemple, en utilisant la propriété Name pour la comparaison).

Remplacement de Equals et GetHashCode :

Pour garantir des comparaisons précises par nom, remplacez les méthodes comme suit :

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

Personnalisé Comparer :

Vous pouvez également créer un comparateur personnalisé qui implémente l'interface IEqualityComparer. Ce comparateur peut être fourni comme deuxième argument de la méthode Union. Plus d'informations sur les comparateurs personnalisés peuvent être trouvées ici : http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal