Maison > développement back-end > C++ > Comment puis-je comparer deux listes pour l'égalité, en ignorant l'ordre des éléments ?

Comment puis-je comparer deux listes pour l'égalité, en ignorant l'ordre des éléments ?

Linda Hamilton
Libérer: 2025-01-21 07:46:13
original
485 Les gens l'ont consulté

How Can I Compare Two Lists for Equality, Ignoring Element Order?

Ignorer l'ordre des éléments pour les comparaisons d'équivalence de liste

Lorsque vous comparez deux List<T> objets, vous souhaitez généralement vérifier si leurs éléments sont égaux, quelle que soit leur position dans la liste. Voici quelques façons d’y parvenir.

1. Égalité des éléments et nombre d'occurrences

Si vous avez besoin que deux listes contiennent les mêmes éléments avec le même nombre d'occurrences, il est recommandé de trier avant de comparer :

<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
Copier après la connexion

2. Méthode d'optimisation

Pour améliorer les performances, notamment lorsque vous traitez des listes volumineuses, vous pouvez utiliser cette méthode personnalisée, qu'il suffit d'implémenter IEquatable :

<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2)
{
    var cnt = new Dictionary<T, int>();
    foreach (T s in list1)
    {
        cnt[s] = cnt.ContainsKey(s) ? cnt[s] + 1 : 1;
    }
    foreach (T s in list2)
    {
        if (cnt.ContainsKey(s))
        {
            cnt[s]--;
        }
        else
        {
            return false;
        }
    }
    return cnt.Values.All(c => c == 0);
}</code>
Copier après la connexion

3. Gestion des types nullables

Si votre élément est de type nullable, vous pouvez utiliser le comparateur personnalisé d'un dictionnaire :

<code class="language-csharp">var comparer = EqualityComparer<T>.Default;
var cnt = new Dictionary<T, int>(comparer);</code>
Copier après la connexion

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