【发布时间】:2016-11-07 21:06:54
【问题描述】:
我有 2 维、3 维和 4 维数组。 (都在不同的时间)
如果我想连接 4 个 2D 数组(4 个 2x2 到 1 个 4x4),我可以通过简单的循环来做到这一点
int[][] result = new int[2 * array1.length][2 * array1.length];
for(int x = 0; x < array1.length; x++)
for(int y = 0; y < array1.length; y++)
result[x][y] = array1[x][y];
for(int x = array1.length; x < result.length; x++)
for(int y = 0; y < array1.length; y++)
result[x][y] = array2[x - array1.length][y];
...
如您所见,这变得非常混乱(2^n 组循环,其中 n 是维数)。我知道我可以使用 System.arraycopy 来简化它,但我仍然需要同样多的循环集。
我有更简单的方法吗?最好是适用于所有维数组的?
请注意,我正在添加每个维度,而不仅仅是将一个添加到另一个维度的末尾。
为了可视化我在做什么,将每个 2D 数组想象成一个正方形,将每个 3D 数组想象成一个立方体。要将它们组合在一起,请将它们缝合在一起形成一个 2x2 正方形(其中每个单元是一个 2D 阵列)或 2x2x2 立方体(其中每个单元是一个 3D 阵列)。
这是 2D 组合的一个糟糕的可视化。|--| + |--| + |--| + |--| = |--|--||--| |--| |--| |--| |--|--|. |--|--|
【问题讨论】:
-
如果 A 和 B 是两个 2x2 暗矩阵,其中 A 是 [1 2] _ [3 4] 而 B 是 [5 6] _ [7 8] (使用这一行符号 A( 1,1) 是 1 并且 A(2,1) 是 3) 使用上述循环的输出将是 [1 2 0 0] _ [3 4 0 0] _ [5 6 0 0] _ [7 8 0 0 ]。这是你想要的输出吗?
-
为什么要做二维数组的4维数组?
-
你的数组总是 int 类型吗?在所有维度上总是相同的大小(2 x 2 或 3 x 3,从不 2 x 3)?你想用你的 3 维和 4 维数组做什么?
-
@hanif 我把代码剪短了,因为它是重复的。只需结合 2,是的,这就是我想要的结果。但是,我将组合 4 个,而不是 2 个。我不想从 4 个 2D 中制作 4D。我想从 4 个二维数组中创建一个二维。
-
虽然这个问题作为“编程挑战/谜题”很有趣,但对于实际问题来说,这听起来像是一种可怕的方法。我的意思是,你的程序中真的有
int[][][][]数组吗?您想将其中的 2^4=16 (!) 个组合成一个大数组吗?按什么顺序? (字典式还是合式式?)无论您在那里做什么,我都会强烈建议以不同的方式解决它。为您的“n 维 int-Array”创建一个接口(并且可能已经有相应的库)。
标签: java arrays multidimensional-array append concatenation