ハッシュとハッシュリファレンスは違うんだよ
- Perl入学式 #3 復習問題
- これのしょっぱなのやつ、vote.plの4番で死にそうに。
- . 「自分の名前 (name)」と「好きな食べ物の配列のリファレンス (favorite_foods)」を持ったハッシュリファレンスを作成しましょう (つまり、好きな食べ物は複数個書いてください)
- . 同様のハッシュリファレンスを2, 3個作ってみましょう (周りの人のリアルデータを使ってハッシュrefを作ると良いかもしれません)
- . 作成した複数のハッシュリファレンスを1つの配列に格納しましょう (配列を操作する関数を使っても良いですし、直で代入しても良いです)
- . どんな方法でも良いので、好きな食べ物のランキングを作って表示してみて下さい
<
- 先週やった問題とはいえ、鳥頭なので何度でも楽しめます。
- なので、先週とは違った解法に目覚めたりしてとても楽しいです。
- 先週はwebとかからいろいろ使えそうなスクリプト引っ張ってきてなんとかしたけど、今回はちょっと考えてみようと。
- ソートのところはよくわからんので、応用問題出されたりしたら分からなそう。何となく分かるんだけど。
use strict;
use warnings;
use Data::Dumper;
my $sironekotoro = {
name => "sironekotoro",
favorite_food => ['meat' ,'beef' ,'chikin']
};
my $softy = {
name => "softy",
favorite_food => ['karikari' , 'kankan' , 'fish' , 'meat']
};
my $siro = {
name => "siro",
favorite_food => ['kankan' , 'meat']
};
my @array = ($sironekotoro , $softy , $siro);
my @foods;
for my $member(@array){
for my $foo(@{$member->{favorite_food}}){
push @foods , $foo;
}
}
my %hash;
for my $bar(@foods){
$hash{$bar} += 1;
};
for my $i(sort { $hash{$b} cmp $hash{$a} } keys %hash){
print "$i : $hash{$i}\n";
};