Assign to Array Column

Salih Dincer salihdb at hotmail.com
Wed Feb 1 03:45:11 UTC 2023


On Tuesday, 31 January 2023 at 01:04:41 UTC, Paul wrote:
> Can I perform a similar assignment to the column?  This, 
> myArr[][0] = 5, doesn't work.

Of course, this question has a short answer and a long answer. So 
the issue is more about column-major. I am someone who likes to 
talk with codes. In fact, everything is side by side in memory. 
This example (something like array) covers the issue:

```d
import std.stdio;

void main()
{
   int[COL][ROW] sample = [ [ 5, 5, 5 ],
                            [ 0, 0, 0 ],
                            [ 0, 0, 0 ],
                          ];

   auto arrayish = Arrayish!int(ROW, COL);
   assert(arrayish.length == SUM);

   // copy array...
   foreach(r; 0..ROW)
   {
     foreach(c; 0..COL)
     {
       arrayish[r, c] = sample[r][c];
     }
   }

   arrayish.print();

   foreach(n; 0..COL)
   {
     //arrayish.columnMajor(n).writeln;/*
     arrayish[n].writeln;//*/
   }

   // clear and set...
   arrayish.elements[] = 0;
   foreach(r; 0..ROW) arrayish[r] = 5;
   arrayish.print();
}

struct Arrayish(T) {
   private {
     T[] elements;
     const size_t row, col;
   }

   this(size_t row, size_t col) {
     this.elements = new T[row * col];
     this.row = row;
     this.col = col;
   }

   ref T opIndex(size_t row = 0, size_t col = 0) {
     return elements[row * this.col + col];
   }

   ref T columnMajor(size_t row = 0, size_t col = 0) {
     return elements[col * this.row + row];
   }

   auto length() {
     return row * col;
   }

   void print() {
     foreach(r; 0..row) {
       foreach(c; 0..col)
         this[r, c].write;
       writeln;
     }
   }
} /* Prints:

555
000
000
5
0
0
500
500
500

*/

```
SDB at 79


More information about the Digitalmars-d-learn mailing list