No puedo garantizar que esta es la más rápido, pero es sin duda bastante eficiente:
bool areEquivalent = array1.Length == array2.Length
&& new HashSet<string>(array1).SetEquals(array2);
EDIT: SaeedAlg y Sandris plantean puntos válidos sobre diferentes frecuencias de duplicados causando problemas con este enfoque. Puedo ver dos soluciones si esto es importante (no he pensado mucho en sus respectivas eficiencias):
1. Clasifique las matrices y luego las compare secuencialmente. Este enfoque, en teoría, debería tener una complejidad cuadrática en el peor de los casos. ej .:
return array1.Length == array2.Length
&& array1.OrderBy(s => s).SequenceEqual(array2.OrderBy(s => s));
2.Build hasta una frecuencia de la tabla de cadenas en cada matriz y luego compararlos. Por ejemplo:
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, gracias :) – izb
Es como @Albin Sunnanbo respuesta puede ser que devuelva dos matriz son iguales y no son iguales. –
@SaeedAlg: ¿Puedes dar un ejemplo? – Ani