On Tuesday, 13 August 2013 at 21:10:53 UTC, John Colvin wrote:
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.

Thanks. I ended up using something along these lines in my code
(although I didn't write a nice generic function as you have
done).



Reply via email to