我有一个这样的数组: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
看起来如此微不足道,但我无法得到它......
答案 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]
的转换是有意义的,那么在每个维度中需要相同的大小,因此您应该能够使用多维数组。