efficient and safe way to iterate on associative array?
Minas Mina via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Mar 4 06:16:55 PST 2016
On Friday, 4 March 2016 at 13:53:22 UTC, aki wrote:
> Is it okay to modify associative array while iterating it?
>
> import std.stdio;
>
> void main() {
> string[string] hash = [ "k1":"v1", "k2":"v2" ];
> auto r = hash.byKeyValue();
> while(!r.empty) {
> auto key = r.front.key;
> auto value = r.front.value;
> r.popFront();
> writefln("key=%s, value=%s", key, value);
> // may not modify 'hash' here ?
> hash = null;
> }
> }
>
> I guess probably it's not.
> Then, my question is are there an efficient and safe way to
> iterate on an associative array even if there are possibility
> to be modified while iterating?
> I'm writing interpreter and want to make my language to be
> safe; even malicious script cannot fall it in 'core dump'
> state. It is okay if it causes undefined behavior like throw or
> instant exit from loop, but not crash.
>
> Thanks, Aki.
I think what you can do is extract its contents to an array,
iterate it and modify it as you like, and then insert back to
another associative array. I don't think it's efficient but I
don't know if it's possible to do something else.
More information about the Digitalmars-d-learn
mailing list