How to create a mutable array of strings?

Dennis Ritchie via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 18 08:02:36 PDT 2015


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.


More information about the Digitalmars-d-learn mailing list