雑記
my @data = ( {prefecture=>'osaka',name=>'fn7'}, {prefecture=>'hyogo',name=>'fn6'}, {prefecture=>'kyoto',name=>'fn5'}, {prefecture=>'hyogo',name=>'fn4'}, {prefecture=>'nara',name=>'fn3'}, {prefecture=>'osaka',name=>'fn2'}, {prefecture=>'kyoto',name=>'fn1'}, {prefecture=>'shiga',name=>'fn0'}, );
というデータがあったとして、prefectureをキーにしてハッシュにする方法を
今迄とは違う方法にしようと自分の中で決めたw
今迄は
my %list_by_pref; foreach(@data){ unless(defined $list_by_pref{$_->{prefecture}}){ $list_by_pref{$_->{prefecture}} = [$_]; }else{ push @{$list_by_pref{$_->{prefecture}}},$_; } }
これからは
my %list_by_pref; foreach(@data){ my $list = $list_by_pref{$_->{prefecture}} || []; push @$list,$_; $list_by_pref{$_->{prefecture}} = $list; }
どちらも以下のようなデータが作成される。
$VAR1 = { 'hyogo' => [ { 'name' => 'fn6', 'prefecture' => 'hyogo' }, { 'name' => 'fn4', 'prefecture' => 'hyogo' } ], 'osaka' => [ { 'name' => 'fn7', 'prefecture' => 'osaka' }, { 'name' => 'fn2', 'prefecture' => 'osaka' } ], 'nara' => [ { 'name' => 'fn3', 'prefecture' => 'nara' } ], 'kyoto' => [ { 'name' => 'fn5', 'prefecture' => 'kyoto' }, { 'name' => 'fn1', 'prefecture' => 'kyoto' } ], 'shiga' => [ { 'name' => 'fn0', 'prefecture' => 'shiga' } ] };