我有一个int,我想转换为3个整数的3d数组的索引,这里是我正在谈论的一个例子。
byte[,,] array = new byte[XSize, YSize, ZSize];
int i = 0;
//other code
array[#,#,#] = cur;
//other code
我不知道如何从#,#,#中获取正确的数字。
答案 0 :(得分:13)
假设您想要遍历Z,然后是Y,然后是X.
int zDirection = i % zLength;
int yDirection = (i / zLength) % yLength;
int xDirection = i / (yLength * zLength);
答案 1 :(得分:3)
您必须对数组空间的方向做出假设。假设您将数字映射为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(xQuotient, YSize, out y);
x = yQuotient % XSize;
}
请注意,这可以比BlackVegetable的解决方案节省一些冗余操作。对于3,3,3矩阵,得到集合:
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)