.dup with twodimensional arrays

Petar Petar
Wed Mar 21 13:36:11 UTC 2018


On Wednesday, 21 March 2018 at 09:59:52 UTC, 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?

If you happen to need more extensive utilities for 
multi-dimensional arrays, I strongly recommend taking a look at 
https://github.com/libmir/mir-algorithm. For example, for the 
general case of creaing an N-dimensional array, I think this is 
the function you need: 
http://docs.algorithm.dlang.io/latest/mir_ndslice_allocation.html#makeNdarray. Before, part of this functionality of libmir was part of the standard library, but due to the explosive growth of the package it was deemed better to keep its developement as a separate dub packages - http://code.dlang.org/search?q=mir.


More information about the Digitalmars-d mailing list