iota access in foreach loop

Brad Anderson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 4 11:55:09 PDT 2016


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


More information about the Digitalmars-d-learn mailing list