digitalmars.D.learn - setting array dimensions at runtime
- user domain.invalid (15/15) Dec 05 2010 Hello,
 - Matthias Walter (5/11) Dec 05 2010 Well, you can do at least:
 - user domain.invalid (18/29) Dec 05 2010 That works.
 - Nekuromento (6/28) Dec 05 2010 The syntax might seem a bit misleading, but you can create
 - Jonathan M Davis (10/32) Dec 05 2010 auto a = new byte[][](9, 9);
 
Hello,
I've been wondering what the easiest way is to set
the dimension of an array during runtime.
You can't write
    byte[][] a = new byte[size][size];
because the compiler will give an error. The only
thing I've been able to think of is
    byte[][] a;
    a.length = size;
    for (int i; i < size; i++) {
         a[i].length = size;
    }
But it's slower (and less convenient) than
writing
    byte[][] a = new byte[9][9];
 Dec 05 2010
 The only thing I've been able to think of is
    byte[][] a;
    a.length = size;
    for (int i; i < size; i++) {
         a[i].length = size;
    }
Well, you can do at least:
auto a = new byte[][size];
foreach (ref row; a)
  row = new byte[size];
Matthias
 Dec 05 2010
On 5-12-2010 19:20, Matthias Walter wrote:That works. So I can write byte[] a = new byte[size]; and byte[][] a = new byte[][size]; but not byte[][] a = new byte[size][]; or byte[][] a = new byte[size][size]; let alone byte[size][size] a; BTW, somebody on stackoverflow just posted an alternative that comes closest to what I was looking for. byte[][] a = new byte[][](size, size); I saw this notation before but I can't remember where. Hey, I love D but it can be pretty confusing sometimes :) ThanksThe only thing I've been able to think of is byte[][] a; a.length = size; for (int i; i< size; i++) { a[i].length = size; }Well, you can do at least: auto a = new byte[][size]; foreach (ref row; a) row = new byte[size];
 Dec 05 2010
On 2010-12-05 19:41:50 +0200, user domain.invalid said:
 Hello,
 
 I've been wondering what the easiest way is to set
 the dimension of an array during runtime.
 
 You can't write
 
     byte[][] a = new byte[size][size];
 
 because the compiler will give an error. The only
 thing I've been able to think of is
 
     byte[][] a;
     a.length = size;
     for (int i; i < size; i++) {
          a[i].length = size;
     }
 
 But it's slower (and less convenient) than
 writing
 
     byte[][] a = new byte[9][9];
The syntax might seem a bit misleading, but you can create 
multidimentional arrays like this:
    int[][] foo = new int[][](5,10);
    foo[4][9] = 31337;
this also works for single-dimention arrays (e.g int[] foo = new int[](size);)
 Dec 05 2010
On Sunday 05 December 2010 09:41:50 user domain.invalid wrote:
 Hello,
 
 I've been wondering what the easiest way is to set
 the dimension of an array during runtime.
 
 You can't write
 
     byte[][] a = new byte[size][size];
 
 because the compiler will give an error. The only
 thing I've been able to think of is
 
     byte[][] a;
     a.length = size;
     for (int i; i < size; i++) {
          a[i].length = size;
     }
 
 But it's slower (and less convenient) than
 writing
 
     byte[][] a = new byte[9][9];
auto a = new byte[][](9, 9);
is the way to do it. Otherwise, I believe that you're trying to create a
dynamic 
array of static arrays or somesuch. I'm not sure exactly what the problem is. 
However, if you just always put the array size in the parens rather than in the 
brackets when creating an array, then it works correctly. Setting the length in 
a loop like that (or creating inner arrays with new) is best when you want the 
inner arrays to be of different length. But when you want them to be the same 
length, then putting the sizes in the parens in the correct way to go.
- Jonathan M Davis
 Dec 05 2010








 
 
 
 user domain.invalid 