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