Я не могу гарантировать, что это самый быстрый , но он, безусловно, весьма эффективен:
bool areEquivalent = array1.Length == array2.Length
&& new HashSet<string>(array1).SetEquals(array2);
РЕДАКТИРОВАТЬ: SaeedAlg и Сандрис поднимают действительные точки о различных частотах дубликатов, вызывая проблемыс таким подходом.Я вижу два обходных пути, если это важно (они не особо задумывались об их эффективности):
1. Сортируйте массивы, а затем сравнивайте их последовательно.Этот подход теоретически должен иметь квадратичную сложность в худшем случае.Например:
return array1.Length == array2.Length
&& array1.OrderBy(s => s).SequenceEqual(array2.OrderBy(s => s));
2.Создайте таблицу частот строк в каждом массиве и затем сравните их.Например:
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();