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