Maison > développement back-end > C++ > Comment puis-je fusionner deux listes d'objets en C# à l'aide de LINQ, en gérant les doublons et les comparaisons personnalisées ?

Comment puis-je fusionner deux listes d'objets en C# à l'aide de LINQ, en gérant les doublons et les comparaisons personnalisées ?

Patricia Arquette
Libérer: 2025-01-01 10:24:11
original
1011 Les gens l'ont consulté

How Can I Merge Two Lists of Objects in C# Using LINQ, Handling Duplicates and Custom Comparisons?

Fusionner des listes d'objets avec Linq

La combinaison de deux listes dans une nouvelle liste avec des conditions spécifiques peut être réalisée à l'aide des méthodes d'extension LINQ. Considérons le scénario suivant :

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

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

Nous souhaitons créer une nouvelle liste qui combine list1 et list2. Pour les personnes identiques, l'enregistrement combiné doit conserver leur nom, utiliser la valeur de la liste2 et calculer la modification comme la différence entre les valeurs des deux listes.

Utilisation de la méthode d'union

La méthode Union dans LINQ offre un moyen simple de fusionner deux listes et de supprimer les doublons. Par exemple :

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

Cela créera une nouvelle liste fusionnée qui combine à la fois list1 et list2, et tous les éléments en double seront exclus.

Comparaison personnalisée pour Equals et GetHashCode

Si la comparaison par défaut des objets basée sur Equals et GetHashCode ne répond pas à nos exigences, nous devons la remplacer ces méthodes dans la classe Person. Par exemple, voici comment rendre la comparaison insensible à la casse pour la propriété Name :

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

    return Equals(person);
}

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

public bool Equals(Person personToCompareTo)
{
    return Name.ToLower() == personToCompareTo.Name.ToLower();
}
Copier après la connexion

Utilisation d'un comparateur personnalisé

Alternativement, nous pouvons définir un comparateur personnalisé classe implémentant l’interface IEqualityComparer. Ensuite, nous pouvons fournir ce comparateur à la méthode Union comme deuxième paramètre :

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

Pour plus d'informations sur les comparateurs personnalisés, reportez-vous à la documentation MSDN.

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