Maison >développement back-end >C++ >Comment puis-je trouver efficacement des éléments uniques dans une liste qui ne figurent pas dans une autre ?

Comment puis-je trouver efficacement des éléments uniques dans une liste qui ne figurent pas dans une autre ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-23 00:29:13349parcourir

How Can I Efficiently Find Unique Elements in One List That Are Not in Another?

Comparez les différences entre deux listes

Lorsque vous traitez deux listes contenant des objets personnalisés, il est souvent nécessaire d'identifier des éléments uniques dans la première liste qui ne sont pas présents dans la deuxième liste. Ce problème peut être résolu efficacement en utilisant la méthode .Except().

Par exemple, considérons deux listes list1 et list2, qui contiennent toutes deux des instances de CustomObject. Pour extraire des éléments propres à list1, utilisez simplement le code suivant :

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

Cette approche simple suppose que le type CustomObject remplace les méthodes Equals() et GetHashCode(), permettant des comparaisons d'égalité et de hachage correctes.

Cependant, si une comparaison plus granulaire est requise, par exemple basée sur un attribut spécifique (tel que l'ID), un comparateur d'égalité personnalisé doit être implémenté. Comme indiqué ci-dessous, cela nécessite de définir une classe qui implémente l'interface IEqualityComparer<T> :

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co)
    {
        return co.Id.GetHashCode();
    }

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        return x1.Id == x2.Id;
    }
}</code>

En utilisant ce comparateur personnalisé, le code suivant effectuera la comparaison souhaitée :

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

Il est important de noter que cette méthode éliminera tout élément en double dans le résultat. Si les doublons doivent être préservés, une stratégie alternative utilisant des ensembles et une clause where est plus appropriée :

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

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