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
Susan Sarandonoriginal
2025-01-23 00:58:10248parcourir

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>

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>

Ensuite, utilisez ce comparateur avec .Except() :

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>

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>

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!

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