如何用特定值填充 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 数组!