foreach multiple loop sugar

Ivan Kazmenko via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 18 13:13:53 PDT 2015


On Tuesday, 18 August 2015 at 16:51:01 UTC, ixid wrote:
> On Tuesday, 18 August 2015 at 16:02:42 UTC, cym13 wrote:
>> On Tuesday, 18 August 2015 at 15:51:55 UTC, ixid wrote:
>>> Though sugar seems to be somewhat looked down upon I thought 
>>> I'd suggest this- having seen the cartesianProduct function 
>>> from std.algorithm in another thread I thought it would be an 
>>> excellent piece of sugar in the language. It's not an earth 
>>> shattering change but it makes something very common more 
>>> elegant and reduces indentation significantly for multiple 
>>> nested loops. Braces make nested loops very messy and any 
>>> significant quantity of code in the loop body benefits from 
>>> not being in a messy nesting.
>>>
>>> ...
>>
>> What would you do with associative arrays?
>>
>> void main() {
>>     auto aa = [1:1, 2:2];
>>     foreach (a, b ; aa, 1..10)
>>         foo(a, b);
>> }
>
> Prevent both iterator count and associative value variables for 
> foreach loops with nested loops. This behaviour of associative 
> arrays is already an odd case as it clashes with the iterator 
> behaviour for other arrays.

It is not iterator count, it is key and value.  And actually, it 
is pretty consistent.

import std.stdio;
void main () {
     foreach (index, value; [2, 4, 8])
         writefln ("a[%s] = %s", index, value);
     foreach (index, value; ['x': 2, 'y': 4, 'z': 8])
         writefln ("b[%s] = %s", index, value);
}

The output is:

a[0] = 2
a[1] = 4
a[2] = 8
b[z] = 8
b[x] = 2
b[y] = 4



More information about the Digitalmars-d-learn mailing list