On 07/11/2016 07:33 AM, Bahman Movaqar wrote:
> On 07/11/2016 06:30 PM, Steven Schveighoffer wrote:
>> Untested, but you could try MySt[][string].init.
>
> That did it. Thanks.
>
>> But passing empty AA by value sometimes can be surprising. I'm not sure
>> if it will work.
>
> Could you elaborate more?
Both AAs and slices behave like reference types even when passed by
value: When a function adds an element, the argument sees that element
as well. This is not the case when the argument is an empty (more
correctly, null) AA or slice:
void foo(string[int] aa) {
aa[1] = "one";
}
void main() {
string[int] a;
foo(a);
assert(a is null);
// The last result would be different if 'a' were not null
// before calling 'foo'.
string[int] b;
b[0] = "zero";
foo(b);
assert(b[0] == "zero");
assert(b[1] == "one");
}
Ali
P.S. There is std.array.assocArray if you already have a range of tuples
at hand:
https://dlang.org/phobos/std_array.html#.assocArray
P.P.S. There is std.algorithm.fold, which works with range chaining
(unlike reduce, which was designed before ranges):
https://dlang.org/phobos/std_algorithm_iteration.html#.fold