Why does std.container.array does not work with foraech( i, a; array ) {} ?

Mithun Hunsur via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 29 04:34:29 PDT 2016


On Sunday, 29 May 2016 at 09:07:07 UTC, Jonathan M Davis wrote:
> On Sunday, May 29, 2016 07:14:12 ParticlePeter via 
> Digitalmars-d-learn wrote:
>> [...]
>
> std.container.array.Array works with foreach via ranges.
>
> foreach(e; myContainer)
> {
> }
>
> gets lowered to
>
> foreach(e; myContainer[])
> {
> }
>
> which in turn gets lowered to something like
>
> for(auto r = myContainer[]; !r.empty; r.popFront())
> {
>     auto e = r.front;
> }
>
> Ranges do not support indices with foreach, and that's why 
> you're not able to get the index with foreach and Array. 
> However, if you use std.range.lockstep, you can wrap a range to 
> get indices with foreach. e.g.
>
> foreach(i, e; lockstep(myContainer[]))
> {
> }
>
> http://dlang.org/phobos/std_range.html#.lockstep
>
> - Jonathan M Davis

I'd say that std.range.enumerate is more indicative of intent:

http://dlang.org/phobos/std_range.html#enumerate


More information about the Digitalmars-d-learn mailing list