IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

List::Util::reduceの使い所

検索してもあまり例がみつけられなかったので備忘で残す。


use List::Util;
use Data::Dumper;

$foo = + [ +{k=>'a', v=>10}, +{k=>'b', v=>30}, +{k=>'c', v=>40}, +{k=>'d', v=>30},];

$max_foo_v = List::Util::reduce { $a->{k} >= $b->{k} ? $a : $b } @$foo;

print Dumper($max_foo_v);

$VAR1 = {
          'k' => 'a',
          'v' => 10
        };


できないことはないけど、これは可読性がないのでやらないか。

use List::Util;
use Data::Dumper;

$foo = + [ +{k=>'a', v=>10}, +{k=>'b', v=>30}, +{k=>'c', v=>40}, +{k=>'d', v=>30},];

$sum_v = List::Util::reduce { $a + $b->{v}} 0, @$foo;

print Dumper($sum_v);

#たぶん、普通はこっちだろうけど。
# List::Util::sum( map {$_->{v}} @$foo );