On Saturday, 4 June 2016 at 18:20:26 UTC, Alex wrote:
Hi all!
Could you help me clearify why a iota can't be accessed with two arguments in a foreach loop?
following tests show my problem:
What does work:
    int[] ku = [0, 1, 2, 3, 4];
    foreach(i, el; ku)
        writeln("index: ", i, " element: ", el);
What does not work:
    counter = 5;
    foreach(i, el; iota(counter))
        writeln("index: ", i, " element: ", el);

Motivation: In real I want to have:
    counter = 5;
    foreach(i, el; randomCover(iota(counter)))
        writeln("index: ", i, " element: ", el);

so, I could follow a random permutation. Maybe there is another simple way to achieve this?

PS: needed imports:
    import std.random : randomCover;
    import std.range : iota;
    import std.stdio : writeln;

Check out enumerate() in std.range;

    int counter = 5;
    foreach(i, el; enumerate(randomCover(iota(counter))))
        writeln("index: ", i, " element: ", el);

    index: 0 element: 3
    index: 1 element: 1
    index: 2 element: 0
    index: 3 element: 2
    index: 4 element: 4

Reply via email to