Is there a smart way to process a range of range by front ?
BBasile via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 23 14:30:36 PDT 2015
On Wednesday, 23 September 2015 at 21:24:22 UTC, Justin Whear
wrote:
> On Wed, 23 Sep 2015 21:17:27 +0000, BBasile wrote:
>
>> On Wednesday, 23 September 2015 at 21:04:44 UTC, Justin Whear
>> wrote:
>>> On Wed, 23 Sep 2015 20:48:03 +0000, BBasile wrote:
>>>
>>>> I was thinking to a general *interleave()* algorithm for any
>>>> compatible Range of Range but I can't find any smart way to
>>>> process each sub range by front
>>>
>>> Can you show a sample input and output to clarify what you
>>> mean by interleave? It's possible that what you want is
>>> std.range.frontTransversal, std.range.transversal, or
>>> std.range.transposed.
>>
>> ---
>> auto r0 = [[0,2],[1,3]];
>> auto r1 = interleave(r0);
>> assert(r1 = [0,1,2,3]);
>> auto r2 = [[0,3],[1,4],[2,5]];
>> auto r3 = interleave(r2);
>> assert(r3 = [0,1,2,3,4,5]);
>> ---
>>
>> the fact that the numbers are ordered is just an helper.
>
> OK, I think what you're after is std.range.roundRobin.
---
import std.range;
auto interleave(RoR)(RoR r)
{
return r.transposed.join;
}
void main()
{
auto r0 = [[0,2],[1,3]];
auto r1 = interleave(r0);
assert(r1 == [0,1,2,3]);
auto r2 = [[0,3],[1,4],[2,5]];
auto r3 = interleave(r2);
assert(r3 == [0,1,2,3,4,5]);
}
--
thx, but as you was suposing initially 'transposed' works.
didn't know this function before. works fine.
More information about the Digitalmars-d-learn
mailing list