[英]Can't understand 3D Arrays
假设double[][][] x = new double[4][5][6]
,为什么x.length, x[2].length
和x[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.