C# 是否将一维阵列索引转换为三维阵列索引?

C# 是否将一维阵列索引转换为三维阵列索引?,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我有一个整数,我想把它转换成3个整数,作为一个3d数组的索引,下面是一个例子 byte[,,] array = new byte[XSize, YSize, ZSize]; int i = 0; //other code array[#,#,#] = cur; //other code 我不知道如何从I中得到#,#,#的正确数字。假设你想迭代Z,然后是Y,然后是X int zDirection = i % zLength; int yDirection = (i / zLength)

我有一个整数,我想把它转换成3个整数,作为一个3d数组的索引,下面是一个例子

byte[,,] array = new byte[XSize, YSize, ZSize];

int i = 0;

//other code

array[#,#,#] = cur;

//other code

我不知道如何从I中得到#,#,#的正确数字。

假设你想迭代Z,然后是Y,然后是X

int zDirection = i % zLength;
int yDirection = (i / zLength) % yLength;
int xDirection = i / (yLength * zLength); 

您必须假设阵列空间的方向。假设将数字映射为0对应于0、0、0,然后迭代z、y、x,那么数学相当简单:

int x;
int y;
int z;

if (i < XSize * YSize * ZSize)
{
    int zQuotient = Math.DivRem(i, ZSize, out z);
    int yQuotient = Math.DivRem(zQuotient, YSize, out y);
    x = yQuotient % XSize;
}

另外,如果使用
i=z+y*ZSize+x*ZSize*YSize
,这是可逆的,您希望以哪种方式循环它?您能提供更多信息吗?您正在尝试迭代所有项目吗?或者您正试图从单个查找值直接访问单个元素?我之前的评论仍然有效:您能否提供输入和预期输出?我认为您正在尝试将(0,0,0)映射到0,(0,0,1)映射到1,依此类推。这就是你想要的吗?你能澄清你的问题吗?@最好改进以前的问题,而不是发布新问题。。。。。
i (x, y, z)
0 (0, 0, 0)
1 (0, 0, 1)
2 (0, 0, 2)
3 (0, 1, 0)
4 (0, 1, 1)
5 (0, 1, 2)
6 (0, 2, 0)
7 (0, 2, 1)
8 (0, 2, 2)
9 (1, 0, 0)
10 (1, 0, 1)
11 (1, 0, 2)
12 (1, 1, 0)
13 (1, 1, 1)
14 (1, 1, 2)
15 (1, 2, 0)
16 (1, 2, 1)
17 (1, 2, 2)
18 (2, 0, 0)
19 (2, 0, 1)
20 (2, 0, 2)
21 (2, 1, 0)
22 (2, 1, 1)
23 (2, 1, 2)
24 (2, 2, 0)
25 (2, 2, 1)
26 (2, 2, 2)