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.

Reply via email to