Contain не находит элемент в List

285
06 ноября 2017, 19:44

Доброго времени суток. Имеется следующий код:

            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. Помогите разобраться, в чём дело.

Answer 1

Массивы сравниваются по ссылке, а не по содержимому.

var a = new[] {1};
var b = new[] {1};
// a != b, т.к. a и b указывают на разные участки памяти

Для сравнения массивов по содержимому можно использовать метод SequenceEqual. В приведенном примере a.SequenceEqual(b) == true.

Для поиска в коллекции можно воспользоваться методом Any:

var result = listOfCertainPerms.Any(_ => _.SequenceEqual(perm));
READ ALSO
Соединение ASP.Net Mvc 5 с MySQL [требует правки]

Соединение ASP.Net Mvc 5 с MySQL [требует правки]

Проблема с типами как я понял

244
Включение ссылок на сборки .Net в UWP

Включение ссылок на сборки .Net в UWP

Возникло затруднение с включением ссылок на сборки определенные в стандартной библиотеке в приложении UWPВ консольном приложении я мог просто...

301
Работа с 2D камерой в Unity3D

Работа с 2D камерой в Unity3D

Недавно начала изучать Unity3D, и столкнулся с неожиданной проблемой: в Unity3D очень неудобно работать с камерой в плане ее размеров на разных разрешениях,...

320
Обработка большого количества combobox&#39;ов

Обработка большого количества combobox'ов

Всем доброго времени сутокДелал я тут на досуге лабу и столкнулся со следующими трудностями: У меня есть программа-калькулятор COCOMO в котором...

363