ハッシュを結合する
単語頻度を扱うと,ハッシュを結合したくなる.いちいち自己流ロジックを書いていたけれど,何か良い方法はないものか.図書館から借りてきたPerlクックブックを開いてみた.
my %new_hash = (%hash1, %hash2); # これは,以下のようなハッシュの初期化ができることから納得できる # my %hash = (hoge => 1, bar => 2, piyo =>3); # my %hash = (hoge, 1, bar, 2, piyo, 3);
あれ,もしかして?
my %hash = ('hoge', 1, 'bar', 2, 'piyo', 3); foreach my $keyorvalue (%hash){ print $keyorvalue . "\n" } 出力結果: bar 3 foo 2 hoge 1
そういうことか!ハッシュはつまり,key, valueのリストとしても扱える発見.これは,かなり便利な使い方ができそうだ.
横道にそれてしまったが,この記法は便利だけれど,重複したキーがあると上書きされてしまうという問題がある.valueが数値の場合は,気にせず
>|perl
foreach my $key (keys %hash2){
$hash1{$key} += $hash2{$key};
}
|