2010-12-05 17 views
6

コンパイル時に配列の次元をまだ認識していないとき、どのように配列の次元を設定しますか?D2:実行時にアレイのサイズを設定する

例:byte [] [] a =新しいバイト[サイズ] [サイズ];コンパイラはそれを許可しません。 グリッドをどのように初期化する必要がありますか?手動で?

byte[] a1; 
for (int i; i < size; i++) { 
    a1 ~= 0; 
} 
byte[][] a2; 
for (int i; i < size; i++) { 
    a2 ~= a1; 
} 

もっと簡単な方法があると教えてください。

編集:これも動作しますが、それはまだ絶望的に原始的で、かつ遅い

byte[][] a3; 
a3.length = size; 
for (int i; i < size; i++) { 
    a3[i].length = size; 
} 

答えて

9

はここで、深さに入ってはいけないDにおける多次元動的配列を初期化する例を示します。

auto a = new int[][](4, 4); 

編集:ここは(あなたは混乱を避けるために、実行時に配列を初期化できることを示す)より完全な例を行く:

int x = 3, y = 4, z = 5; 
auto a = new byte[][][](x, y, z); 

Stdout(a[0][0].length).newline; // prints 5 
a[0][0].length = 10; 
Stdout(a[0][0].length).newline; // prints 10 
+0

はい、そのトリックはありません。もちろん、それはauto = new int [] [](size、size);を読み込む必要があります。しかし、それは動作します。ありがとう。私は前にこの表記を見ましたが、どこを覚えていないのですか。 – fwend

+1

これは依然として不揃いな配列を生成するので、サイズを変更するのは難しいことに注意してください。 – BCS

関連する問題