2010-12-05 51 views
6

如何在編譯時尚未知道數組的維數?例如:byte [] [] a = new byte [size] [size];例如:byte [] [] []編譯器不允許它。 我該如何初始化網格?手動?D2:在運行時設置數組維數

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 a = new int [] [](size,size);但它的工作。謝謝。我之前看到過這個符號,但我不記得在哪裏。 – fwend 2010-12-05 18:40:00