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;
Nous souhaitons créer une nouvelle liste
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();
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(); }
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();
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!