以不同的顺序遍历3D阵列

时间:2012-08-11 13:15:18

标签: c# traversal jagged-arrays

我有一个这样的数组: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

看起来如此微不足道,但我无法得到它......

1 个答案:

答案 0 :(得分:1)

你所拥有的不是multidimensional array,而是jagged array。在多维数组中,您有一个表示固定的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][row, col, floor]的转换是有意义的,那么在每个维度中需要相同的大小,因此您应该能够使用多维数组。