On Monday, 18 May 2015 at 14:43:33 UTC, Steven Schveighoffer
wrote:
Right, you'd apply the map/array combo to each element:
Yes, I knew it.
alias m = map!(a => a.dup); // too bad can't do array as well
auto s = [m(["foo", "baz"]).array, m(["bar", "test"]).array];
Or to get even more crazy:
auto s = map!(a => map!(a => a.dup)(a).array)(/* your input
array */).array;
Imagine a five-dimensional array will be :)
But this means you are duping more of the array literal than
you really should.
It's likely helpful to have somewhere in std.array a dupArray
function that does map!(a => a.dup).array work in one go (and
without making a temporary array):
auto s = [dupArray("foo", "baz"), dupArray("bar", "test")];
Yes, it would be nice. I believe that Phobos need such function.
deepDup would dup the whole thing. All you need to dup is the
string literals, as array literals constructed at runtime are
on the heap (and mutable) already. The literal already is
wasted even in my original suggestion, but this is doubly
wasteful.
Right.