Assign to Array Column

Paul Backus snarwin at
Thu Feb 2 05:47:34 UTC 2023

On Tuesday, 31 January 2023 at 01:04:41 UTC, Paul wrote:
> Greetings,
> for an array byte[3][3] myArr, I can code myArr[0] = 5 and have:
> 5,5,5
> 0,0,0
> 0,0,0
> Can I perform a similar assignment to the column?  This, 
> myArr[][0] = 5, doesn't work.
> Thanks!

Here's a solution using standard-library functions:

     import std.range: transversal;
     import std.algorithm: map, fill;
     import std.stdio: writefln;

     void main()
         byte[3][3] myArr;
             .map!((ref row) => row[])
         writefln("%(%s\n%)", myArr[]);

The only tricky part here is the call to `map`, which is 
necessary to change the type of the rows from `byte[3]` (which is 
not a range type) to `byte[]` (which is one).

Once we've done that, `transversal(0)` lets us iterate over the 
items at index 0 in each row (in other words, over the first 
column), and `fill` sets each of those items to the specified 

By the way, if we use Godbolt to look at the generated code, we 
can see that LDC with optimizations enabled compiles this very 
efficiently--it is able to inline all the range functions and 
unroll the loop:

More information about the Digitalmars-d-learn mailing list