D2: установка размеров массива во время выполнения - PullRequest
6 голосов
/ 05 декабря 2010

Как установить размер массива, когда вы еще не знаете его во время компиляции?

Например: 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;
} 

1 Ответ

9 голосов
/ 05 декабря 2010

Не вдаваясь в глубины, вот пример инициализации многомерного динамического массива в 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
...