.dup with twodimensional arrays

Steven Schveighoffer schveiguy at yahoo.com
Wed Mar 21 10:26:03 UTC 2018


On 3/21/18 5:59 AM, berni wrote:
> I need code, that generates a copy of a twodimensional array.
> 
> What I do is:
> 
>> auto tmp = new int[][](X,X);
>> foreach (i; 0..X) tmp[i] = solution[i].dup;
>>
>> solutions ~= tmp;
> 
> because solutions ~= solution.dup obviously doesn't work (the refs are 
> copied, not the elements of the inner arrays).
> 
> Is there a better solution without this extraneous tmp variable? Im 
> thinking of something like
> 
>> solutions ~= solution.nice_phobos_function_id_dont_know.dup;
> 
> or something similar?

I don't think there is, but you could potentially use map and array:

import std.algorithm: map;
import std.array: array;

solutions ~= tmp
    .map!(a => a.dup) // every access to an element dups it first
    .array;           // build an array out of the result

I'm not 100% sure array only calls front once per element, but I'm 
pretty sure.

On 3/21/18 6:01 AM, berni wrote:
 > Oops, sorry. I just have seen, that I posted in the wrong forum, should
 > have been in "New users Learn". Is it possible to move this post over?

Sorry, posts can't be moved, but no big deal :)

-Steve


More information about the Digitalmars-d mailing list