Maison > développement back-end > C++ > Comment puis-je comparer efficacement deux objets de liste pour l'égalité du contenu en C# ?

Comment puis-je comparer efficacement deux objets de liste pour l'égalité du contenu en C# ?

DDD
Libérer: 2025-01-21 07:41:10
original
457 Les gens l'ont consulté

How Can I Efficiently Compare Two List Objects for Content Equality in C#?

Comparez le contenu des objets List en C# pour voir s'ils sont égaux

Lors de la comparaison de deux objets List, vous devez souvent déterminer s'ils contiennent les mêmes éléments, quel que soit l'ordre des éléments. Cela soulève la question : C# fournit-il une fonction intégrée pour ce type de comparaison ?

Si l'ordre des éléments n'a pas d'importance, trier les deux listes avant de comparer est une approche simple. Ceci peut être réalisé en utilisant le code suivant :

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

Alternativement, pour améliorer les performances et être compatible avec les types qui implémentent IEquatable mais pas IComparable, vous pouvez utiliser la méthode suivante :

<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)
    {
        if (cnt.ContainsKey(s))
        {
            cnt[s]++;
        }
        else
        {
            cnt.Add(s, 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

Si le type de données utilisé comme clé ne prend pas en charge les comparaisons d'égalité par défaut, vous pouvez utiliser une autre version de la fonction ci-dessus qui prend un comparateur d'égalité comme paramètre :

<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)
{
    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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal