0

多次元配列を作成しましたが、内部配列全体を別の (1 次元) 配列に等しく設定したいと考えています。配列の各位置を通過して設定する以外に、どうすればこれを行うことができます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 次元配列ではありませんでした。」

4

1 に答える 1

5

「ギザギザ」配列 (配列の配列) と多次元配列を混在させています。あなたが使いたいのはおそらくギザギザの配列です(彼の正気の誰も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 配列は、多くのセルを持つ単一のモノリシックな「オブジェクト」です。配列の配列は代わりに多くのオブジェクトです: 2D ジャグ配列の場合、1 つのオブジェクトは行の「構造」(外部コンテナー) 用であり、1 つは各「行」用です。したがって、最後にジャグ配列では単一の を実行する必要があり、ジャグ配列では 20 行と 20 (x = 0...19) を各行に 1 つずつ作成new int[20, 20]する必要があります。ああ...忘れていました: ギザギザの配列は「ギザギザ」にできます: 各「行」は異なる数の「列」を持つことができます。(私が言ったことはすべて、3d および *d 配列に対しても有効です:-) スケールアップするだけです)new int[20][]myArray[x] = new int[20]

于 2011-10-14T16:05:31.937 に答える