2010-12-05 13 views
6

¿Cómo se establece la dimensión de una matriz cuando aún no la conoce en tiempo de compilación?D2: establecer las dimensiones de la matriz en el tiempo de ejecución

Por ejemplo: byte [] [] a = new byte [size] [size]; El compilador no lo permite. ¿Cómo se supone que debo inicializar la grilla? ¿A mano?

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

Por favor, dime que hay una manera más sencilla.

Editar: Esto también funciona, aunque todavía es irremediablemente primitiva, y lentos

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

Respuesta

9

No entrar en profundidades, aquí es un ejemplo de inicialización matriz dinámica multidimensional en el D:

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

Editar: aquí va ejemplo más completo (lo que demuestra que se puede inicializar el array en tiempo de ejecución para evitar confusiones):

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

Sí, eso hace el truco. Por supuesto, debería leer auto a = new int [] [] (tamaño, tamaño); Pero funciona. Gracias. Vi esta notación antes, pero no recuerdo dónde. – fwend

+1

Cabe señalar que esto todavía genera una matriz desigual por lo que cambiar el tamaño es complicado. – BCS

Cuestiones relacionadas