Установить внутренний массив в многомерном массиве в C#
Я создал многомерный массив и хочу установить весь внутренний массив равным отдельному (одномерному) массиву. Как я могу это сделать, помимо прохождения каждой позиции в массивах и настройки grid[row][val] = inputNums[val]
?
int[,] grid = new int[20,20];
// read a row of space-deliminated integers, split it into its components
// then add it to my grid
string rowInput = "";
for (int row = 0; (rowInput = problemInput.ReadLine()) != null; row++) {
int[] inputNums = Array.ConvertAll(rowInput.Split(' '), (value) => Convert.ToInt32(value))
grid.SetValue(inputNums , row); // THIS LINE DOESN'T WORK
}
Конкретная ошибка, которую я получаю:
"Обработано исключение аргумента: массив не был одномерным массивом".
1 ответ
Вы смешиваете "зубчатые" массивы (массивы массивов) с многомерными массивами. То, что вы хотите использовать, - это, вероятно, неровные массивы (потому что никто в здравом уме не захочет использовать массивы md:-))
int[][] grid = new int[20][];
// ...
grid[row] = inputNums;
// access it with
grid[row][col] = ...
// columns of a row:
var cols = grid[row].Length;
// number of rows:
var rows = grid.Length;
Массив md - это один монолитный "объект" со множеством ячеек. Массивы массивов вместо этого представляют собой множество объектов: для двумерного зубчатого массива один объект предназначен для строки "структура" (внешний контейнер), а другой - для каждой "строки". Таким образом, в конце с неровным массивом вы должны сделать один new int[20, 20]
с неровным массивом вы должны сделать new int[20][]
это создаст 20 строк и 20 myArray[x] = new int[20]
(с x = 0...19) по одному для каждой строки. Ах... я забыл: неровный массив может быть "неровным": у каждой "строки" может быть различное количество "столбцов". (все, что я вам сказал, действительно даже для трехмерных и *d массивов:-) Вам нужно только увеличить его)