Comparer la liste
Cet article explique comment comparer deux objets List
Plan initial
Pour assurer une égalité exacte, c'est à dire que les deux listes contiennent les mêmes éléments et leurs fréquences, il est recommandé de trier les listes avant de comparer :
<code class="language-C#">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
Plan d'optimisation
Cependant, afin d'améliorer les performances, quelqu'un a proposé une autre solution :
<code class="language-C#">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>
Les performances de cette méthode sont nettement meilleures que la solution initiale. Elle ne nécessite que l'interface IEquatable
et non l'interface IComparable
.
Gestion de différents types de données
Afin de s'adapter à la situation consistant à contenir différents types de données (y compris les types nullables) comme clés, une solution améliorée peut être utilisée :
<code class="language-C#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { 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!