std.algorithm.reduce on an array of structs
monarch_dodra via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Sep 11 08:38:30 PDT 2014
On Thursday, 11 September 2014 at 14:56:00 UTC, Daniel Kozak via
Digitalmars-d-learn wrote:
> V Thu, 11 Sep 2014 14:49:02 +0000
> bearophile via Digitalmars-d-learn
> <digitalmars-d-learn at puremagic.com>
> napsáno:
>
>> Daniel Kozak:
>>
>> You can just use min:
>>
>> import std.stdio, std.algorithm;
>>
>> struct Thing {
>> uint x;
>> alias x this;
>> }
>>
>> alias minimum = reduce!min;
>>
>> void main() {
>> immutable ar1 = [10, 20, 30, 40, 50];
>> ar1.minimum.writeln;
>>
>> immutable ar2 = [Thing(10), Thing(20), Thing(40)];
>> ar2.minimum.writeln;
>> }
>>
>> Bye,
>> bearophile
>
> Yep, this look the most idiomatic :).
>
> Why there is no phobos function for minimum of array(range)?
There is: http://dlang.org/phobos/std_algorithm.html#.minPos
To note though: minPos will "find" the position of the smallest
element, whereas reduce will accumulate and return the lowest
value. That said:
alias minmax = reduce!(min, max);
auto mm = ar1.minmax();
auto min = mm[0];
auto max = mm[1];
Found both in one line of code, and only 1 iteration of ar1.
More information about the Digitalmars-d-learn
mailing list