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 维元素矩阵。在锯齿状数组中,您有一个大小可能不同的数组。

假设您可以将定义转换为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]to的转换[row, col, floor]有意义,那么您需要在每个维度内具有相同的大小,因此您应该能够使用多维数组。

于 2012-08-11T13:31:59.320 回答