Доброго времени суток. Имеется следующий код:
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));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Возникло затруднение с включением ссылок на сборки определенные в стандартной библиотеке в приложении UWPВ консольном приложении я мог просто...
Недавно начала изучать Unity3D, и столкнулся с неожиданной проблемой: в Unity3D очень неудобно работать с камерой в плане ее размеров на разных разрешениях,...
Всем доброго времени сутокДелал я тут на досуге лабу и столкнулся со следующими трудностями: У меня есть программа-калькулятор COCOMO в котором...