Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以不同顺序遍历三维阵列_C#_Traversal_Jagged Arrays - Fatal编程技术网

C# 以不同顺序遍历三维阵列

C# 以不同顺序遍历三维阵列,c#,traversal,jagged-arrays,C#,Traversal,Jagged Arrays,我有这样一个数组:int[][[]网格\地板\行\列 我想像这样遍历它:int[][[]网格行列层 首先,我尝试更改for循环,然后更改数组(复制到一个新的),但我就是做不到,我的想法没有进一步…我甚至不知道这是否可能 这是相同的数据,我只需要以不同的顺序遍历,读取每列、每行的所有楼层……下面是我遍历的方式: for (int floor = 0; floor < grid_floor_row_col.Length; floor++) { for (int row = 0; row

我有这样一个数组:
int[][[]网格\地板\行\列

我想像这样遍历它:
int[][[]网格行列层

首先,我尝试更改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
        }

    }
}

看起来很琐碎,但我无法得到它。

你拥有的不是一个,而是一个。在多维数组中,有一个数组表示元素的固定n维矩阵。在锯齿状数组中,可能有一个大小不同的数组数组

假设可以将定义转换为
int[,]grid\u floor\u row\u col
,则可以使用按任意顺序迭代标注

for(int row=0;row

对于锯齿状阵列,您无法做到这一点,原因很简单,每个楼层阵列可以有不同的大小,这意味着每个楼层的行数不同(这同样适用于每行的列)。如果您从
[floor,row,col]
[row,col,floor]
的转换是有意义的,那么每个维度内部都需要相同的大小,因此您应该能够使用多维数组。

您拥有的不是一个,而是一个。在多维数组中,有一个数组表示元素的固定n维矩阵。在锯齿状数组中,可能有一个大小不同的数组数组

假设可以将定义转换为
int[,]grid\u floor\u row\u col
,则可以使用按任意顺序迭代标注

for(int row=0;row

对于锯齿状阵列,您无法做到这一点,原因很简单,每个楼层阵列可以有不同的大小,这意味着每个楼层的行数不同(这同样适用于每行的列)。如果从
[floor,row,col]
[row,col,floor]
的转换是有意义的,那么每个维度内部都需要相同的大小,因此应该能够使用多维数组。

C#命名约定:
gridFloorRowCol
。但无论如何,您可能应该考虑一个更好的名称(根据数组表示的内容,例如
房间
?)C#命名约定:
gridFloorRowCol
。但是,你可能应该想出一个更好的名字(根据数组的代表性,例如:代码>房间< /代码>)我想C++数组…无论如何,我不想去多维数组…困扰我的是我已经有了我想要的数据,但是我只是想用不同的方式访问它,这怎么可能?我能不能通过以不同的方式将其复制到新阵列,将其转换为另一个锯齿阵列?@Icebone1000对于锯齿阵列,您无法确定每个阵列在每个维度中的大小是否相同。因此,您不知道包含所有楼层的
网格行列列列[row][col]
数组需要多大。您必须首先遍历整个数组,收集所有数组大小,使用所有这些大小创建新数组并填充它。当然,如果你知道数组在所有维度上都应该具有相同的大小,你可以稍微欺骗一下,使用
grid\u floor\u row\u col[0]。行的长度为
grid\u floor\u row\u col[0][0]。地板的长度为
,假设
grid\u floor\u row\u col[0][0]
将始终存在。不过,它不是很优雅,对于你的用例来说,多维数组会更适合。我想C++数组。无论如何,我不想去多维数组。困扰我的是我已经有了我想要的数据,但是我只是想用不同的方式访问它,这怎么可能?我能不能通过以不同的方式将其复制到新阵列,将其转换为另一个锯齿阵列?@Icebone1000对于锯齿阵列,您无法确定每个阵列在每个维度中的大小是否相同。因此,您不知道包含所有楼层的
网格行列列列[row][col]
数组需要多大。您必须首先遍历整个数组,收集所有数组大小,使用所有这些大小创建新数组并填充它。当然,如果你知道数组在所有维度上都应该具有相同的大小,你可以稍微欺骗一下,使用
grid\u floor\u row\u col[0]。行的长度为
grid\u floor\u row\u col[0][0]。地板的长度为
,假设
grid\u floor\u row\u col[0][0]
将始终存在。不过,它不是很优雅,对于您的用例来说,多维数组更适合。
for rows
  for cols
    for floors
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
        }
    }
}