1

私はこのような配列を持っています:int[][][] grid_floor_row_col;

私はこのようにそれをトラバースしたい:int[][][] grid_row_col_floor;

最初にforループを変更してから、配列を変更しようとしました(新しいものにコピーします)が、それができません。私の心はそれ以上進みません...それがそうであるかどうかさえわかりません可能..

それは同じデータです。列ごと、行ごとにすべてのフロアを読み取り、異なる順序でトラバースする必要があるだけです....これが私がどのようにトラバースしていたかです:

for (int floor = 0; floor < grid_floor_row_col.Length; floor++)
{
    for (int row = 0; row < grid_floor_row_col[floor].Length; row++)
    {
        for (int col = grid_floor_row_col[floor][row].Length - 1; col >= 0; col--)
        {
            //do stuff
        }

    }
}

今、トラバースする必要があります:

for rows
  for cols
    for floors

とても些細なことのようですが、それでもわかりません..

4

1 に答える 1

1

あなたが持っているのは多次元配列ではなく、ギザギザの配列です。多次元配列では、要素の固定 n 次元行列を表す 1 つの配列があります。ジャグ配列では、サイズが異なる可能性のある配列の配列があります。

定義を に変換できると仮定するとint[,,] grid_floor_row_col、 を使用して任意の順序でディメンションを反復処理できますArray.GetLength(int)

for (int row = 0; row < grid_floor_row_col.GetLength(1); row++) {
    for (int col = 0; col < grid_floor_row_col.GetLength(2); col++) {
        for (int floor = 0; floor < grid_floor_row_col.GetLength(0); floor++) {
            int elem = grid_floor_row_col[floor, row, col];
            // do stuff
        }
    }
}

各フロア配列のサイズが異なる可能性があるという単純な理由で、ギザギザ配列でこれを行うことはできません。つまり、フロアごとの行数が異なります (行ごとの列にも同じことが当てはまります)。[floor, row, col]からへの変換が[row, col, floor]意味をなす場合、各次元内で同じサイズが必要なため、多次元配列を使用できるはずです。

于 2012-08-11T13:31:59.320 に答える