如何用特定值填充 3d 数组
How to a populate a 3d array with specific values
我希望这看起来不是一个简单的问题。
我之前已经能够通过这种方法填充二维数组。但我不确定如何使用这个网格或类似的网格来填充 3D 数组。这可能是一个非常简单的问题,但我希望有人能指出正确的方向。
我想用它来制作 2d 游戏关卡。
int[][][] LevelGrid = new int[LevelGridHeight][LevelGridWidth][3];
int[][][] start_Grid = { {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,} }
谢谢
int[][][] arr3d = new int[][][]{{{1 , 2} , {4 , 5} , {{1 , 3}}};
//or
int[][][] arr3d = new int[x][y][z];
int[2][1][4] = 5;
但如果可能的话,您真的应该寻找另一种表示数据的方式。存储 3 维数组所需的内存大小很快就会变得非常大。
有索引:
int[][][] start_Grid = {
{ { /*[0][0][0] */1, /*[0][0][1] */ 2, /*[0][0][2] */ 3, }, {/*[0][1][0] */ 1, /*[0][1][1] */ 2, /*[0][1][2] */ 3 } },
{ { /*[1][0][0] */1, /*[1][0][1] */56, /*[1][0][2] */ 55 }, { /*[1][1][0] */1, /*[1][1][1] */56, /*[1][1][2] */55 } }
}
您可以将一维数组想象成 "things" 的数组,无论数组是什么类型。
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] array3 = {7, 8, 9};
int x = array1[0];
您可以将二维数组视为数组的数组。
int[][] array2d= {array1, array2, array3};
int[] xArray = array2d[0];
int x = xArray[0]; //array2d[0][0];
您可以将三维数组想象成一个数组的数组。
int[][][] array3d = {array2d_1, array2d_2, array2d_3};
int x = array3d[0][0][0];
因此您可以先构建子阵列,然后将它们添加到 3D 阵列,或者您可以一次完成所有操作:
int[][][] array3D = {
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} },
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} }
};
编辑:这是一个首先构建子数组,然后从中构建 3d 数组的示例:
void setup() {
//one-dimensional arrays are arrays of things
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6 };
int[] array3 = {7, 8, 9};
int[] array4 = {10, 11, 12};
int[] array5 = {13, 14, 15};
int[] array6 = {16, 17, 18};
//two-dimensional arrays are arrays of arrays
int[][] row1 = {array1, array2, array3};
int[][] row2 = {array4, array5, array6};
//three-dimensional arrays are arrays of arrays of arrays
int[][][] array3d = {row1, row2};
}
而且我没有设置大小,因为我使用的是数组初始化shorthand,所以我不需要提前设置大小。请注意,您也没有在初始化 start_Grid 时设置大小。
另请注意,就像其他人所说的那样,使用这样的数组会变得非常笨拙。所以除非你有充分的理由使用数组,否则你可能应该使用某种数据结构。我想无论你的 "bottom-level" 数组代表什么,都可以用某种对象表示,然后你只需要一个二维数组,这更容易考虑。但这真的取决于您 - 3D 数组只是数组的 2D 数组!
我希望这看起来不是一个简单的问题。 我之前已经能够通过这种方法填充二维数组。但我不确定如何使用这个网格或类似的网格来填充 3D 数组。这可能是一个非常简单的问题,但我希望有人能指出正确的方向。 我想用它来制作 2d 游戏关卡。
int[][][] LevelGrid = new int[LevelGridHeight][LevelGridWidth][3];
int[][][] start_Grid = { {5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,} }
谢谢
int[][][] arr3d = new int[][][]{{{1 , 2} , {4 , 5} , {{1 , 3}}};
//or
int[][][] arr3d = new int[x][y][z];
int[2][1][4] = 5;
但如果可能的话,您真的应该寻找另一种表示数据的方式。存储 3 维数组所需的内存大小很快就会变得非常大。
有索引:
int[][][] start_Grid = {
{ { /*[0][0][0] */1, /*[0][0][1] */ 2, /*[0][0][2] */ 3, }, {/*[0][1][0] */ 1, /*[0][1][1] */ 2, /*[0][1][2] */ 3 } },
{ { /*[1][0][0] */1, /*[1][0][1] */56, /*[1][0][2] */ 55 }, { /*[1][1][0] */1, /*[1][1][1] */56, /*[1][1][2] */55 } }
}
您可以将一维数组想象成 "things" 的数组,无论数组是什么类型。
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] array3 = {7, 8, 9};
int x = array1[0];
您可以将二维数组视为数组的数组。
int[][] array2d= {array1, array2, array3};
int[] xArray = array2d[0];
int x = xArray[0]; //array2d[0][0];
您可以将三维数组想象成一个数组的数组。
int[][][] array3d = {array2d_1, array2d_2, array2d_3};
int x = array3d[0][0][0];
因此您可以先构建子阵列,然后将它们添加到 3D 阵列,或者您可以一次完成所有操作:
int[][][] array3D = {
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} },
{ {0,1,2}, {0,1,2} }, { {0,1,2}, {0,1,2} }
};
编辑:这是一个首先构建子数组,然后从中构建 3d 数组的示例:
void setup() {
//one-dimensional arrays are arrays of things
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6 };
int[] array3 = {7, 8, 9};
int[] array4 = {10, 11, 12};
int[] array5 = {13, 14, 15};
int[] array6 = {16, 17, 18};
//two-dimensional arrays are arrays of arrays
int[][] row1 = {array1, array2, array3};
int[][] row2 = {array4, array5, array6};
//three-dimensional arrays are arrays of arrays of arrays
int[][][] array3d = {row1, row2};
}
而且我没有设置大小,因为我使用的是数组初始化shorthand,所以我不需要提前设置大小。请注意,您也没有在初始化 start_Grid 时设置大小。
另请注意,就像其他人所说的那样,使用这样的数组会变得非常笨拙。所以除非你有充分的理由使用数组,否则你可能应该使用某种数据结构。我想无论你的 "bottom-level" 数组代表什么,都可以用某种对象表示,然后你只需要一个二维数组,这更容易考虑。但这真的取决于您 - 3D 数组只是数组的 2D 数组!