2010-12-05 32 views
6

Comment définir la dimension d'un tableau lorsque vous ne le connaissez pas encore au moment de la compilation?D2: définition des dimensions du tableau à l'exécution

Par exemple: byte [] [] a = new octet [taille] [taille]; Le compilateur ne le permet pas. Comment suis-je supposé initialiser la grille? Manuellement?

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

Dites-moi s'il vous plaît qu'il existe un moyen plus simple.

Edit: cela fonctionne aussi, mais il est encore désespérément primitive, et lent

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

Répondre

9

Ne pas entrer dans des profondeurs, est ici un exemple d'initialisation tableau dynamique multidimensionnelle D:

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

Edit: va ici exemple plus complet (montrant que vous pouvez initialiser ensemble lors de l'exécution pour éviter toute confusion):

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

Oui, ça fait l'affaire. Bien sûr, il devrait lire auto a = new int [] [] (taille, taille); Mais ça fonctionne. Merci. J'ai déjà vu cette notation mais je ne me souviens plus où. – fwend

+1

Il convient de noter que cela génère toujours un tableau irrégulier, il est donc difficile de le redimensionner. – BCS