2-D array initialization

MoonlightSentinel moonlightsentinel at disroot.org
Sat Aug 1 00:08:33 UTC 2020


On Friday, 31 July 2020 at 23:42:45 UTC, Andy Balba wrote:
> How does one initialize c in D ?

ubyte[3][4] c = [ [5, 5, 5], [15, 15,15], [25, 25,25], [35, 
35,35]  ];

> none of the statements below works
>
>  c = cast(ubyte) [ [5, 5, 5], [15, 15,15], [25, 25,25], [35, 
> 35,35]  ];

This is an invalid cast because it tries to coerce the entire 
literal into an ubyte. Also  it would be an assignment instead of 
an initialization because this is independent of c's declaration.

> c[0] = ubyte[3] [5, 5, 5]   ;  c[1] = ubyte[3] [15, 15,15] ;
> c[2] = ubyte[3] [25, 25,25] ;  c[3] = ubyte[3] [35, 35,35] ;

A cast is usually specified as `cast(TargetType) value` but not 
necesseray in this example. Use this instead:

c[0] = [5, 5, 5]   ;  c[1] = [15, 15,15] ;
c[2] = [25, 25,25] ;  c[3] = [35, 35,35] ;

> for (int i= 0; i<3; i++) for (int j= 0; i<4; j++) c[i][j]= 
> cast(ubyte)(10*i +j) ;

The array indices and the inner loop condition are wrong

for (int i= 0; i<3; i++) for (int j= 0; j<4; j++) c[j][i]= 
cast(ubyte)(10*i +j) ;

You could also use foreach-loops, e.g.

foreach (j, ref line; c)
     foreach (i, ref cell; line)
         cell = cast(ubyte) (10 * i + j);



More information about the Digitalmars-d-learn mailing list