Replacing nested loops foreach using map/each/etc

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 25 10:19:26 PDT 2015


On Monday, 25 May 2015 at 17:05:35 UTC, Dennis Ritchie wrote:
> On Monday, 25 May 2015 at 16:41:35 UTC, Meta wrote:
>> import std.algorithm;
>> import std.range;
>> import std.stdio;
>>
>> void main()
>> {
>>    const x = 12, y = 65, z = 50, s = 1435;
>>    auto a = iota(0, x + 1);
>>    cartesianProduct(a, a, a)
>>      	.filter!(i => i[0] * (y + 3 * z)
>>            + i[1] * (y + 2 * z)
>>            + i[2] * (y + z)
>>            == s)
>>      	.each!((idx)
>>              {
>>                  writeln(idx[0] + idx[1] + idx[2]);
>>                  writeln(idx[0] * 3 + idx[1] * 2 + idx[2]);
>>                  writeln(idx[0] * 3 + idx[1] * 2 + idx[2]);
>>                  writeln(idx[0], idx[1], idx[2]);
>>              });
>> }
>
> Thanks. I do not even know what `each` support braces.

`each` doesn't support braces. There are 4 ways to write a 
function/delegate literal in D (with a few minor variations):

Short form:
function(int i) => i;
(int i) => i
(i) => i
i => i

Long form:
function(int i) { return i; }
(int i) { return i; }
(i) { return i; }
{ return 0; }

http://dlang.org/expression.html#FunctionLiteral
function


More information about the Digitalmars-d-learn mailing list