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
Susan Sarandonoriginal
2024-12-26 19:04:13500parcourir

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;

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();

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);
}

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!

Déclaration:
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