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