On Friday, 10 June 2022 at 08:08:45 UTC, Chris Katko wrote:
Is it somehow possible to use a struct as a [multidimensional] array index:

````D

struct indexedPair
{
size_t x, y;
}

bool isMapPassable[100][100];
auto p = indexedPair(50, 50);

if(isMapPassable[p]) return true;

````

Probably not, but I'm curious.

AFAIK no.
I admit it's an area D could improve on, it creates a lot of confusion because of the ordering and the lack of an integrated solution. (arrays of arrays has different order for declaration and addressing, and declaring array of arrays has different order depending on how you declare it and wether it's static or dynamic array, *oof*)

To give you an idea of the situation :
```D
    int[3][1] a;//one array of 3 int
    writeln(a[0][2]);//first "column", third "row"
```

One thing you could do however is make the array accept a multidimensional argument through operator overloading(opIndex) if it is the only array from a struct, but that gets unviable when you have multiple arrays that would benefit from it.

To summarize, there does not appear to be an easy solution that has no drawbacks. I'd recommend saving yourself the trouble of array of arrays(of arrays?) and using a single array of length x*y with a function to index into it `(x+(xlength*y)` or `( (x+(xlength*y)) + ((xlength*ylength)*z)) )` if that is desirable.

Reply via email to