Thread overview
Dinamyc arrays
Sep 17, 2023
Timofey
Sep 17, 2023
Salih Dincer
Sep 17, 2023
user1234
September 17, 2023

I`ve just started learning d and have a question.
What should I write to set dinamyc rectangular array length in both dimentions?
For example, I have declareted an array:
int[][] matrix;
and want set it as n*n matrix.
Thanks

September 17, 2023

On Sunday, 17 September 2023 at 17:15:34 UTC, Timofey wrote:

>

I`ve just started learning d and have a question.
What should I write to set dinamyc rectangular array length in both dimentions?
For example, I have declareted an array:
int[][] matrix;
and want set it as n*n matrix.
Thanks

There are many ways to do this, but I can quickly show you two:

import std.stdio;
void main()
{
    int[][] matrix;
    enum n = 6;

    // method 1:
    //matrix = new int[][](n, n); /*

    // method 2:
    matrix.length = n;
    foreach(ref e; matrix)
        e.length = n;//*/
    
    matrix.writeln;
}

SDB@79

September 17, 2023

On Sunday, 17 September 2023 at 17:15:34 UTC, Timofey wrote:

>

I`ve just started learning d and have a question.
What should I write to set dinamyc rectangular array length in both dimentions?
For example, I have declareted an array:

int[][] matrix;

and want set it as n*n matrix.
Thanks

You can flatten the mat and use operator overloads. Here's a some basic code to get started:

struct SquaredMat(T)
{
    size_t dim;
    T[] array;

    this(usize dim)
    {
        this.dim = dim;
        array.length = dim * dim;
    }

    auto opIndex(size_t x, size_t y)
    {
        return array[x * dim + y];
    }

    auto opIndexAssign(size_t x, size_t y, T value)
    {
        array[x * dim + y] = value;
        return this;
    }
}

Those kind of type should already exist in 3rd part native D libraries, e.g "MIR" has something called "NDSlice" IIRC.