2010-12-05 6 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; 
} 

Просьба сообщить мне, что существует более простой способ.

Edit: это также работает, но он по-прежнему безнадежно примитивный и медленный

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

ответ

9

Не вдаваясь в глубины, вот пример инициализации многомерного динамического массива в D:

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

Edit: здесь идет более полный пример (показывая, что вы можете инициализировать массив во время выполнения, чтобы избежать путаницы):

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 [] [] (размер, размер); Но это работает. Благодарю. Я видел эти записи раньше, но я не могу вспомнить, где. – fwend 2010-12-05 18:40:00

Смежные вопросы