Je ne peux pas garantir que c'est le le plus rapide, mais il est certainement très efficace:
bool areEquivalent = array1.Length == array2.Length
&& new HashSet<string>(array1).SetEquals(array2);
EDIT: SaeedAlg et Sandris soulèvent des points valides sur les différentes fréquences de doublons causant des problèmes avec cette approche. Je peux voir deux solutions de contournement si cela est important (ne pas avoir pensé beaucoup à leurs efficacités respectives):
1.Sort les tableaux, puis les comparer séquentiellement. Cette approche, en théorie, devrait avoir une complexité quadratique dans le pire des cas. .: par exemple
return array1.Length == array2.Length
&& array1.OrderBy(s => s).SequenceEqual(array2.OrderBy(s => s));
2.Build une fréquence table de chaînes dans chaque tableau, puis de les comparer. Par exemple:
if(array1.Length != array2.Length)
return false;
var f1 = array1.GroupBy(s => s)
.Select(group => new {group.Key, Count = group.Count() });
var f2 = array2.GroupBy(s => s)
.Select(group => new {group.Key, Count = group.Count() });
return !f1.Except(f2).Any();
Br illiant, merci :) – izb
Il est comme réponse @Albin Sunnanbo peut-être vous retournez deux tableau sont égaux et ils ne sont pas égaux. –
@SaeedAlg: Pouvez-vous donner un exemple? – Ani