Arrays 如何展平3D阵列?

Arrays 如何展平3D阵列?,arrays,flatten,Arrays,Flatten,我有一个3D数组,其中包含游戏中每个不同区块的整数值;int[x][y][z]=块ID 我需要将数组展平为一维数组;int[值]=块ID 我在网站上查找答案,我看到的大多数答案都是错误的,结果非常糟糕,例如我的世界是2048x2048x128个街区,也就是536870912个街区。我需要一个数学方程,它可以为536870912个不同的值提供536870912个不同的结果 这是我在网站上找到的一个例子(不起作用):value=x+y*maxX+z*maxZ*maxY 世界是一个正方形,但高度是固定

我有一个3D数组,其中包含游戏中每个不同区块的整数值;int[x][y][z]=块ID

我需要将数组展平为一维数组;int[值]=块ID

我在网站上查找答案,我看到的大多数答案都是错误的,结果非常糟糕,例如我的世界是2048x2048x128个街区,也就是536870912个街区。我需要一个数学方程,它可以为536870912个不同的值提供536870912个不同的结果

这是我在网站上找到的一个例子(不起作用):value=x+y*maxX+z*maxZ*maxY 世界是一个正方形,但高度是固定的。 谢谢

编辑: 设定器代码:

world.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY] = Block.DARK_STONE.getId();
World.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY];
过去是这样
world.blocks[x][y][z]=Block.DARK_STONE.getId()

getter代码:

world.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY] = Block.DARK_STONE.getId();
World.blocks[x+y*world.maxSize+z*world.maxSize*world.maxSizeY];
而不是

World.blocks[x][y][z];
区块[]

blocks = new int[2048*2048*128];
maxSize和maxSizeY

maxSize = 2048;
maxSizeY = 128;

你的例子似乎很接近。应该是

x+(y*maxX)+(z*maxX*maxY)

使用int[2][3][4]可以得到:

0 0 0 = 0 + 0 + 0 = 0
1 0 0 = 1 + 0 + 0 = 1
0 1 0 = 0 + 2 + 0 = 2
1 1 0 = 1 + 2 + 0 = 3
0 2 0 = 0 + 4 + 0 = 4
1 2 0 = 1 + 4 + 0 = 5
0 0 1 = 0 + 0 + 6 = 6
1 0 1 = 1 + 0 + 6 = 7
0 1 1 = 0 + 2 + 6 = 8
1 1 1 = 1 + 2 + 6 = 9
0 2 1 = 0 + 4 + 6 = 10
1 2 1 = 1 + 4 + 6 = 11

。。。你明白了。

你的例子似乎很接近。应该是

x+(y*maxX)+(z*maxX*maxY)

使用int[2][3][4]可以得到:

0 0 0 = 0 + 0 + 0 = 0
1 0 0 = 1 + 0 + 0 = 1
0 1 0 = 0 + 2 + 0 = 2
1 1 0 = 1 + 2 + 0 = 3
0 2 0 = 0 + 4 + 0 = 4
1 2 0 = 1 + 4 + 0 = 5
0 0 1 = 0 + 0 + 6 = 6
1 0 1 = 1 + 0 + 6 = 7
0 1 1 = 0 + 2 + 6 = 8
1 1 1 = 1 + 2 + 6 = 9
0 2 1 = 0 + 4 + 6 = 10
1 2 1 = 1 + 4 + 6 = 11

。。。你明白了。

你的例子似乎很接近。应该是

x+(y*maxX)+(z*maxX*maxY)

使用int[2][3][4]可以得到:

0 0 0 = 0 + 0 + 0 = 0
1 0 0 = 1 + 0 + 0 = 1
0 1 0 = 0 + 2 + 0 = 2
1 1 0 = 1 + 2 + 0 = 3
0 2 0 = 0 + 4 + 0 = 4
1 2 0 = 1 + 4 + 0 = 5
0 0 1 = 0 + 0 + 6 = 6
1 0 1 = 1 + 0 + 6 = 7
0 1 1 = 0 + 2 + 6 = 8
1 1 1 = 1 + 2 + 6 = 9
0 2 1 = 0 + 4 + 6 = 10
1 2 1 = 1 + 4 + 6 = 11

。。。你明白了。

你的例子似乎很接近。应该是

x+(y*maxX)+(z*maxX*maxY)

使用int[2][3][4]可以得到:

0 0 0 = 0 + 0 + 0 = 0
1 0 0 = 1 + 0 + 0 = 1
0 1 0 = 0 + 2 + 0 = 2
1 1 0 = 1 + 2 + 0 = 3
0 2 0 = 0 + 4 + 0 = 4
1 2 0 = 1 + 4 + 0 = 5
0 0 1 = 0 + 0 + 6 = 6
1 0 1 = 1 + 0 + 6 = 7
0 1 1 = 0 + 2 + 6 = 8
1 1 1 = 1 + 2 + 6 = 9
0 2 1 = 0 + 4 + 6 = 10
1 2 1 = 1 + 4 + 6 = 11

。。。你明白了。

代码工作正常,我重写了引擎,现在工作正常,问题不在公式中(我想)。

代码工作正常,我重写了引擎,现在工作正常,问题不在公式中(我想)。

代码工作正常,我重写了引擎,现在工作正常,问题不在公式中(我想)。

代码工作正常,我重新编写了引擎,现在它工作正常,问题不在公式中(我想).

这是
z*maxX*maxY
不是
z*maxZ*maxY
。想象一下在现实生活中你会怎么做,你一行一行地躺着,如果你用一片x*y做了,你就拿下一片。x、y和z的顺序应该取决于你最经常遍历它的方式。@PeterT maxZ谢谢你的回答,在我的生活中,两片x都是一样的既然我有一个正方形的世界,它对我仍然不起作用它的可能复制将块放置在不应该的地方,但当我使用3D阵列时,它工作得很好,例如草层充满了混入空气的木材,地形也不再看起来真实,那里曾经很平滑,有山丘等。它是
z*maxX*maxY
而不是
z*maxX*maxY
。想象一下在现实生活中你会怎么做,你一排一排地躺着,如果你用一片x*y做了,你就拿下一片。x、y和Z的顺序应该取决于你最常遍历它的方式。@PeterT谢谢你的回答,在我的世界里,maxZ和maxX都是一样的,因为我有一个正方形的世界,这对我来说仍然不起作用定义“不起作用”它的可能复制将块放置在不应该的地方,但当我使用3D阵列时,它工作得很好,例如草层充满了混入空气的木材,地形也不再看起来真实,那里曾经很平滑,有山丘等。它是
z*maxX*maxY
而不是
z*maxX*maxY
。想象一下在现实生活中你会怎么做,你一排一排地躺着,如果你用一片x*y做了,你就拿下一片。x、y和Z的顺序应该取决于你最常遍历它的方式。@PeterT谢谢你的回答,在我的世界里,maxZ和maxX都是一样的,因为我有一个正方形的世界,这对我来说仍然不起作用定义“不起作用”它的可能复制将块放置在不应该的地方,但当我使用3D阵列时,它工作得很好,例如草层充满了混入空气的木材,地形也不再看起来真实,那里曾经很平滑,有山丘等。它是
z*maxX*maxY
而不是
z*maxX*maxY
。想象一下在现实生活中你会怎么做,你一排一排地躺着,如果你用一片x*y做了,你就拿下一片。x、y和Z的顺序应该取决于你最常遍历它的方式。@PeterT谢谢你的回答,在我的世界里,maxZ和maxX都是一样的,因为我有一个正方形的世界,这对我来说仍然不起作用ugh.define“not work”它的可能副本将块放置在不应该的位置,但当我使用3D阵列时,它工作得很好,例如草层充满了混入空气的原木,地形看起来也不再真实,那里曾经很平滑,有山丘等。