2016-07-05 2 views
1

私は2次元、3次元、4次元の配列を持っています。 (異なる時間ですべて)
私は4つの2次元アレイ(1×4の4つの2x2の)を連結する場合は、私は簡単なループでこれを行うことができJavaで多次元配列を連結する最良の方法は何ですか?

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でこれを単純化することができますが、私はまだ多くのループセットが必要です。
これを行うための簡単な方法はありますか?好ましくは、すべての次元の配列のために働くもの?
もう1つの次元の最後に1つずつ追加するのではなく、各次元に追加することに注意してください。 私がしていることを視覚化するには、各2D配列を正方形として、各3D配列を立方体として想像してください。それらを結合するには、2×2の正方形(各単位が1つの2D配列)または2×2×2の立方体(各単位は1つの3D配列)を形成するようにそれらを結合します。
ここでは、2Dの組み合わせの見栄えの悪い描写があります。
|--| + |--| + |--| + |--| = |--|--|
|--| |--| |--| |--| |--|--|
. |--|--|

+0

AとBが2つの2×2のディムマトリクスである場合、Aは[1 2] _ [3 4]であり、Bは[5 6] _ [7 8](この1行の表記A(1,1)は1とA(2,1)は3です)上記のループの出力は[1 2 0 0] _ [3 4 0 0] _ [5 6 0 0] _ [7 8 0 0]になります。これはあなたの希望する出力ですか? – hanif

+0

なぜ2次元配列の4次元配列を作成したいのですか? – eldo

+0

配列は常にint型ですか?すべての次元で常に同じサイズ(2 x 2または3 x 3、決して2 x 3) 3次元配列と4次元配列で何をしたいですか? –

答えて

0

2次元配列の場合、あなたは宣言できます

private static void fillInto(int[][] biggerArray, int[][] smallArray, int targetI, int targetJ) { 
    int expectedLength = smallArray.length; 
    for (int i = 0; i < smallArray.length; i++) { 
     if (smallArray[i].length != expectedLength) { 
      throw new IllegalArgumentException("Unexpected length " + smallArray[i].length); 
     } 
     System.arraycopy(smallArray[i], 0, biggerArray[targetI + i], targetJ, expectedLength); 
    } 
} 

は今、あなたは行くことができます:

int[][] array1 = new int[][] { { 1, 2 }, { 3, 2 } }; 
    int[][] array2 = new int[][] { { 3, 4 }, { 6, 4 } }; 
    int[][] array3 = new int[][] { { 5, 5 }, { 10, 6 } }; 
    int[][] array4 = new int[][] { { 7, 6 }, { 13, 8 } }; 

    int[][] result = new int[2 * array1.length][2 * array1.length]; 
    fillInto(result, array1, 0, 0); 
    fillInto(result, array2, array1.length, 0); 
    fillInto(result, array3, 0, array1.length); 
    fillInto(result, array4, array1.length, array1.length); 
    System.out.println(Arrays.deepToString(result)); 

結果:

[[1, 2, 5, 5], [3, 2, 10, 6], [3, 4, 7, 6], [6, 4, 13, 8]] 

おそらく3次元と4次元で同様のことを行うことができます。

関連する問題