Perl のリスト、ハッシュのマージ、reduce メモ
Ruby での
require "pp"
data = [
{ :name => "foo", :value => 1 },
{ :name => "bar", :value => 2 },
{ :name => "baz", :value => 3 },
]
pp data.inject(0) {|r,i| r + i[:value] }
pp data.inject({}) {|r,i| r.update( i[:name] => i ) }
__END__
6
{"baz"=>{:value=>3, :name=>"baz"},
"foo"=>{:value=>1, :name=>"foo"},
"bar"=>{:value=>2, :name=>"bar"}}use List::Util qw/reduce/;
use Data::Dumper;
sub p ($) { print Dumper shift }
my $data = [
{ name => "foo", value => 1 },
{ name => "bar", value => 2 },
{ name => "baz", value => 3 },
];
p reduce { $a + $b->{value} } 0, @$data;
p reduce { +{ %$a, $b->{name} => $b } } {}, @$data;
__END__
$VAR1 = 6;
$VAR1 = {
'bar' => {
'value' => 2,
'name' => 'bar'
},
'baz' => {
'value' => 3,
'name' => 'baz'
},
'foo' => {
'value' => 1,
'name' => 'foo'
}
};
引数のとりかた的に Perl は初期値の与えかたが自然な感じがする。