Доброго времени суток. Имеется следующий код:
int[] perm = new int[] { 0, 1, 2, 3 };
int[] perm_inverse = new int[] { 0, 3, 2, 1};
List<int[]> listOfCertainPerms = new List<int[]>();
for (int k = 0; k < perm.Length; k++)
{
int[] intTmp = new int[perm.Length];
int[] intTmp_inverse = new int[perm_inverse.Length];
for (int j = 0; j < intTmp.Length; j++)
intTmp[j] = (perm[j] + k) % perm.Length;
listOfCertainPerms.Add(intTmp);
for (int j = 0; j < intTmp.Length; j++)
intTmp_inverse[j] = (perm_inverse[j] + k) % perm.Length;
listOfCertainPerms.Add(intTmp_inverse);
}
if (listOfCertainPerms.Contains(perm))
Console.WriteLine("Success!");
Содержимое listOfContains после выполнения данного кода следующее:
Однако почему-то условие ifне выполняется, хотя массив perm - это самый первый элемент в listOfCertainPerms. Помогите разобраться, в чём дело.
Массивы сравниваются по ссылке, а не по содержимому.
var a = new[] {1};
var b = new[] {1};
// a != b, т.к. a и b указывают на разные участки памяти
Для сравнения массивов по содержимому можно использовать метод SequenceEqual. В приведенном примере a.SequenceEqual(b) == true.
Для поиска в коллекции можно воспользоваться методом Any:
var result = listOfCertainPerms.Any(_ => _.SequenceEqual(perm));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости