Maison > développement back-end > C++ > Comment puis-je comparer efficacement deux listes non ordonnées pour l'égalité en C# ?

Comment puis-je comparer efficacement deux listes non ordonnées pour l'égalité en C# ?

Susan Sarandon
Libérer: 2025-01-21 07:52:08
original
688 Les gens l'ont consulté

How Can I Efficiently Compare Two Unordered Lists for Equality in C#?

Comparer les objets de liste non ordonnée pour l'égalité

Déterminer si deux objets List sont égaux est un problème courant. Bien qu’ils puissent contenir les mêmes éléments, leur ordre peut être différent. Cela soulève la question : comment comparer des éléments quel que soit leur ordre.

Si le nombre d'occurrences de chaque élément est important, une solution simple est de trier les deux listes avant de comparer :

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

Solution d'optimisation pour les éléments IEquatable

Pour les éléments qui nécessitent uniquement d'implémenter l'interface IEquatable (au lieu de IComparable), il existe une approche plus efficace :

<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.GetValueOrDefault(s, 0) + 1;
    }
    foreach (T s in list2) {
        if (cnt.ContainsKey(s)) cnt[s] -= 1;
        else return false;
    }
    return cnt.Values.All(x => x == 0);
}</code>
Copier après la connexion

Ce schéma compte le nombre d'occurrences de chaque élément dans la première liste puis soustrait le nombre d'occurrences de la deuxième liste. Les deux listes sont considérées comme égales si chaque décompte atteint zéro.

Gestion des types de clés personnalisés

Si les types d'éléments ne sont pas comparables (par exemple, les types nullables), vous pouvez spécifier un comparateur pour le dictionnaire :

<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
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