We have slices, do we have Strides?

Kai Meyer kai at unixlords.com
Mon Aug 8 15:33:55 PDT 2011


On 08/08/2011 12:55 PM, Jonathan M Davis wrote:
>> I have a problem I'd really like to use Strides for to simplify my code.
>> Currently, I do this:
>> foreach(n; 0..chunks)
>> comp_arr[n] = values[(n * step_size) + n]
>> if(!all_same(comp_arr, comp_arr[0]))
>>
>> It would eliminate an entire 2 lines of code for each time I want
>> strides, to be able to do this:
>> if(!all_same(bytes[i..$..step_size])
>>
>> Meaning, start with i, grab all elements at i + block_size * n until
>> block_size * n>  bytes.length. Right?
>>
>> -Kai Meyer
>
> Would std.range.stride work for you?
>
> - Jonathan M Davis

It would, if there was a way to give it an offset:

int[] a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ];
assert(equal(stride(a, 3), [ 1, 4, 7, 10 ][]));
assert(equal(stride(a, 3, 1), [ 2, 5, 8, 11 ][]));
assert(equal(stride(a, 3, 2), [ 3, 6, 9 ][]));
assert(equal(stride(a, 3, 3), [ 4, 7, 10 ][]));

Is that possible?


More information about the Digitalmars-d-learn mailing list