key membership in multi-dimensional assoc. array

Steven Schveighoffer schveiguy at gmail.com
Thu Jun 15 02:21:16 UTC 2023


On 6/14/23 9:47 PM, Paul wrote:
> I found I can check for key membership in a multi-D aa...
> ```d
> byte zKey = someval;
> byte[byte][byte][byte] cubelist;
> 
> foreach(byte xK, yzcubelist; cubelist) {
>    foreach(byte yK, zcubelist; yzcubelist) {
>      foreach(byte zK, val; zcubelist) {
> ```
> with this expression...
> ```d
>      if(zKey in cubelist[xK][yK])
> ```
> Is there a way to check for membership in the x & y dimensions?
> ```d
>      if(yKey in cubelist[xK] ??? [zK])
> ```
> *Thanks in advance for any ideas or solutions.*

Not in as short code. You could write a helper though:

```d
auto deepIn(V, K, Keys...)(V[K] aa, Keys keys) if (Keys.length > 0)
{
    auto v = keys[0] in aa;
    static if(keys.length == 1)
      return v;
    else
      return v ? deepIn(*v, keys[1 .. $]) : null;
}

if(auto v = cubelist.deepIn(xKey, yKey, zKey)) { // v now points at the 
value
}
```

-Steve


More information about the Digitalmars-d-learn mailing list