Установить внутренний массив в многомерном массиве в 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 массивов:-) Вам нужно только увеличить его)

Другие вопросы по тегам