Maison > développement back-end > C++ > Comment puis-je trouver efficacement la différence entre deux listes en C# à l'aide de .Except() et IEqualityComparer ?

Comment puis-je trouver efficacement la différence entre deux listes en C# à l'aide de .Except() et IEqualityComparer ?

Susan Sarandon
Libérer: 2025-01-23 00:58:10
original
246 Les gens l'ont consulté

How Can I Efficiently Find the Difference Between Two Lists in C# Using .Except() and IEqualityComparer?

Comparaison et identification des différences entre les listes C#

Déterminer efficacement les différences entre deux listes est une tâche courante en programmation C#. La méthode .Except() offre une solution puissante, mais son application peut être nuancée, notamment lorsque l'on travaille avec des objets personnalisés.

Utilisation de .Except() avec l'égalité de type de référence

Pour les objets personnalisés (par exemple, CustomObjects) qui remplacent correctement les méthodes Equals() et GetHashCode(), l'utilisation de .Except() est simple :

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
Copier après la connexion

Cela crée list3, contenant des éléments de list1 qui ne sont pas dans list2.

Comparaison d'égalité personnalisée avec IEqualityComparer

Des contrôles d'égalité plus complexes, tels que la comparaison basée sur une propriété spécifique (comme Id), nécessitent l'implémentation de l'interface IEqualityComparer<T>. Voici un exemple :

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co) => co.Id.GetHashCode();
    public bool Equals(CustomObject x1, CustomObject x2) => x1.Id == x2.Id;
}</code>
Copier après la connexion

Ensuite, utilisez ce comparateur avec .Except() :

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
Copier après la connexion

Gestion des éléments en double

Le standard .Except() supprime les doublons. Pour les préserver, utilisez cette alternative :

<code class="language-csharp">var set2 = new HashSet<CustomObject>(list2);
var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
Copier après la connexion

Cela exploite un HashSet pour une vérification efficace des membres, ce qui entraîne list3 avec des doublons conservés. Notez que l'ordre des éléments dans list3 peut différer de l'original list1.

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