Associative Array, get value instead of poiter using `if (auto ..)`, possible?

Paul Backus snarwin at gmail.com
Sat Aug 31 14:25:29 UTC 2024


On Saturday, 31 August 2024 at 12:47:25 UTC, ryuukk_ wrote:
> ```D
> void main()
> {
>     int[string] test;
>
>     test["hello"] = 42;
>
>     if (auto it = "hello" in test)
>     {
>
>     }
>
> }
> ```
> Is there a way to get the value instead of a pointer? while 
> keeping the conciseness (one line)

Once the next release of Phobos comes out, with [PR 9039][1] 
merged, you'll be able to do it like this:

```d
import std.typecons;

Nullable!V maybeGet(K, V)(V[K] aa, K key)
{
     if (auto ptr = key in aa)
         return nullable(*ptr);
     else
         return Nullable!V.init;
}

void main()
{
     import std.stdio;

     int[string] test = ["hello": 42];

     if (auto it = test.maybeGet("hello"))
     {
         writeln("hello => ", it.get);
     }
}
```

[1]: https://github.com/dlang/phobos/pull/9039


More information about the Digitalmars-d-learn mailing list