Using zip to copy subarray into another

John Colvin john.loughran.colvin at gmail.com
Tue Aug 13 14:10:52 PDT 2013


On Tuesday, 13 August 2013 at 20:23:00 UTC, Craig Dillabaugh 
wrote:
> On Tuesday, 13 August 2013 at 19:50:37 UTC, Jonathan M Davis
> wrote:
>> On Tuesday, August 13, 2013 21:22:24 Craig Dillabaugh wrote:
>>> I have code that attempts to copy a slice of one array into
>>> another using zip. However, the array is not updated. I am
>>> guessing this is because modifying the returned tuple does not
>>> modify the actual arrays.
>>> 
>>> Is there any way to do this.
>>
>> Why not just use std.algorithm.copy, or even just assigning 
>> one array to the
>> other? e.g.
>>
>> dest[2 .. 5] = src[1 .. 4];
>>
>> - Jonathan M Davis
>
> These work reasonably well and I will likely use your 
> suggestions
> here.
>
> The one thing I get with zip that I lose using 
> std.algorithm.copy
> or straight assignment of the slices is that it handles
> mismatches in slice sizes automatically (it stops as soon as
> either slice is exhausted).
>
> For example
>
>    copy(array2[4..8], array1[9..$]);
>
> where array1 had 10 elements fails because it copies data off 
> the
> end of array1, and if I use straight assignment the slices must
> be the same length.
>
> Craig


warning: untested!

void myCopy(T)(T[] a, T[] b)
{
     auto possible = min(a.length, b.length);
     a[0 .. possible] = b[0 .. possible];
}

myCopy(array2[4..8], array1[9..$]);

Arrays only atm, but you could quite easily spruce that up in to 
something much more generic.


More information about the Digitalmars-d-learn mailing list