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