繁体   English   中英

无法理解 3D 数组

[英]Can't understand 3D Arrays

假设double[][][] x = new double[4][5][6] ,为什么x.length, x[2].lengthx[0][0].length是 4、5 和6 ? 为什么[0][0].length是 6?

要可视化一个 3 维数组并理解它的长度,您可以根据字面物理维度来考虑它(还记得《平地》一书吗?)。

一个对象:

.

对象数组:

.............

该数组的长度 ( array.length ) 是从左到右计数的元素或点数。

一个二维对象数组:

.............
.............
.............
.............
.............
.............

前一个数组中的每个元素现在都有自己的数组,向下排列。 此数组中第一个元素的长度( array[0].length ,最左上角)正在计算从上到下的点数。

一个三维数组就像一个立方体(这都是假设元素之间的长度一致)

.............
............. .
............. . .
............. . . .
............. . . .
............. . . .
  . . . . . . . . .
   . . . . . . . ..
    . . . . . . . . 

以前的阵列中的每个元素现在都有自己阵列(去“变成”屏幕)。 数组中第一个元素的长度( array[0][0].length ,最左上角的元素)是深度的点数。

我一次也没有(直接)使用过三维数组。

使用new double[4][5][6] ,您拥有的是 20 个长度为 6 的数组。它们可寻址为:

x[0][0] // array of length 6
x[0][1] // another array of length 6 here
x[0][2] // etc...
x[0][3]
x[0][4]
x[1][0]
x[1][1]
x[1][2]
x[1][3]
x[1][4]
x[2][0]
x[2][1]
x[2][2]
x[2][3]
x[2][4]
x[3][0]
x[3][1]
x[3][2]
x[3][3]
x[3][4]

当你声明一个诸如 double[] x = new double[5] 这样的数组时,你是说你想要一个 5 长的 double 数组,即

    (type) x = new (type)[size];

因此,当您声明 double[][][] x = new double[4][5][6] 时,您是在说您想要一个 6 长的 double[][] 数组:

    (double[][])[] x = new (double[4][5])[6];

处理多维数组时,将它们视为“数组数组”很有用。 也就是说, double[]是一个doubles的数组, double[][]将是一个double[]的数组,而double[][][]是一个由 doubles 数组组成的数组。 所以让我们分解你的例子:

double[][][] x = new double[4][5][6];

向后工作,我们可以将其视为由 6 个double[][]数组组成的数组,每个数组包含 5 个double[]数组。 这些数组中的每一个都包含 4 个双精度值。 还糊涂?

另一件可能有助于了解关系的事情是使用括号来写:

(((double[])[])[])

现在,当您访问x[2] ,您实际上是在x索引2处检索数组数组,该数组的长度为 5。

当您访问x[0][0] ,这仍然只是另一个数组(请记住,我们将数组构建为数组数组),您在new语句中将其声明为长度为6 也就是说, x[0][0]不会包含数字,但会包含double[][]类型的数组,其长度为6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM