第13回 多段ハッシュ
さて、前回は多次元配列のお話でした。今回は、多段ハッシュのお話です。
配列の中に配列が入っているのは「次元」という言葉をつかって「多次元配列」と呼ばれるのですが、
ハッシュの値の中にまたハッシュが入っているのは、「段」という言葉をつかって「多段ハッシュ」と呼ばれます。
やはり、値の方には、「スカラーな値」しか持てませんので、リファレンスで頑張ります。
さて、この多段ハッシュでどんなことができるのかというと、
「A組には、中西、木村、田中」、「B組には、斉藤、山本」がいるとして、それぞれの苗字から名前を取得するということができます。
use strict; use Data::Dumper; my %c = ( 'A'=>{ '中西' => 'ビンゴ', '木村' => '次郎', '田中' => '三郎' }, 'B'=>{ '斉藤' => '4郎', '山本' => '5郎' } ); print "$c{'A'}->{'中西'}", "\n"; print "$c{'B'}->{'山本'}", "\n"; # A組だけ表示 print "\n"; print "A組", "\n"; for ( keys %{$c{'A'}} ){ print "$_ : $c{'A'}->{$_}", "\n"; }
結果:
ビンゴ 5郎 A組 木村 : 次郎 中西 : ビンゴ 田中 : 三郎
どうでしょうか? これは、かなり強力なプログラミングテクニックです。
配列では、無味乾燥な数字(インデックス)でデータにアクセスしますが、
ハッシュなら名前を持っているのでデータを管理しやすいです(下手につけると余計に管理しづらくなりますが)。
さて、配列の [ ] と [ ]の間のデリファレンスの矢印は、省略することができました。
これ、ハッシュも同じで、 { } と { } の間のデリファレンスの矢印は省略することが可能です。
ということで先ほどのプログラムは、
use strict; use Data::Dumper; my %c = ( 'A'=>{ '中西' => 'ビンゴ', '木村' => '次郎', '田中' => '三郎' }, 'B'=>{ '斉藤' => '4郎', '山本' => '5郎' } ); print "$c{'A'}{'中西'}", "\n"; # 矢印省略 print "$c{'B'}{'山本'}", "\n"; # 矢印省略 # A組だけ表示 print "\n"; print "A組", "\n"; for ( keys %{$c{'A'}} ){ print "$_ : $c{'A'}{$_}", "\n"; # 矢印省略 }
このようにも 書けます。
結果:
ビンゴ 5郎 A組 木村 : 次郎 中西 : ビンゴ 田中 : 三郎
それでは また〜