Maison >développement back-end >C++ >Comment puis-je comparer efficacement deux listes non ordonnées avec des éléments en double en C# ?

Comment puis-je comparer efficacement deux listes non ordonnées avec des éléments en double en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-21 07:57:08325parcourir

How Can I Efficiently Compare Two Unordered Lists with Duplicate Elements in C#?

Comparez efficacement des listes non ordonnées avec les mêmes éléments et occurrences en C#

En C#, comparer deux listes pour l'égalité peut être difficile lorsque l'ordre des éléments n'a pas d'importance. Pour les listes contenant plusieurs éléments identiques, la détermination de l’équivalence devient plus complexe.

Considérons la tâche de comparer les objets List list1 et list2, où le nombre d'occurrences de chaque élément doit être le même dans les deux listes. Pour ce faire, une approche en plusieurs étapes est nécessaire.

Comparaison après tri

Une approche simple consiste à trier les deux listes avant de les comparer. À l'aide de l'extrait de code suivant, vous pouvez vérifier l'égalité des éléments et l'indépendance de l'ordre :

<code class="language-c#">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>

Comparaison basée sur un dictionnaire

Pour améliorer les performances, pensez à utiliser la méthode ScrambledEquals, qui utilise un dictionnaire pour compter le nombre d'occurrences d'un élément :

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2)</code>

Cette méthode utilise un dictionnaire rempli de clés représentant des éléments uniques et des valeurs représentant le nombre d'occurrences de chaque élément dans la liste1. Ensuite, il parcourt list2, décrémentant le nombre d’éléments correspondants. Si un élément de list2 n'est pas trouvé dans le dictionnaire ou si le nombre ne correspond pas, la fonction renvoie false. Enfin, cela garantit que tous les comptes du dictionnaire sont nuls, ce qui signifie qu'il y a des occurrences égales dans les deux listes.

Gestion des types nullables

Pour prendre en charge les types nullables ou tout type de données en tant que clés de dictionnaire, fournissez un comparateur personnalisé dans la méthode ScrambledEquals :

<code class="language-c#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer)</code>

En combinant cette fonctionnalité, vous pouvez comparer efficacement les listes quels que soient l'ordre et le nombre d'éléments.

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