Snippets
Created by
sironekotoro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
# Perl入学式 2018 第3回 復習問題 vote.pl
# https://github.com/perl-entrance-org/workshop-2018/blob/master/3rd/practice.md
# 1-1 リファレンスの作成
# 1.自分の名前nameと、好きな食べ物favorite_foodsをkeyに持つハッシュリファレンスを作成してください。このとき、好きな食べ物のvalueは配列のリファレンスにしてください。
# ハッシュリファレンスのvalueに、好きな食べ物を無名配列で入れる
my $hash_ref_myself = {
name => 'sironekotoro',
favorite_foods => [ 'pudding', 'chocolate', ],
};
# 確認用Data::Dumper
# print Dumper $hash_ref_myself;
# 2.同様のハッシュリファレンスを2, 3個作ってみましょう。(例が思い浮かばなければ、周りの人のリアルデータを使ってみましょう)
# https://ja.wikipedia.org/wiki/ジョルノ・ジョバァーナ
# 1.@favorite_food という配列を作成
my @favorite_food_array = ( 'chocolate', 'pudding', 'salad' );
# 2.@favorite_food をリファレンス化して、
# スカラー favorite_food_array_ref に代入
my $favorite_food_array_ref = \@favorite_food_array;
# 3.$array_ref をハッシュリファレンス $hash_ref_comic の
# キー favolite_food に対する valueとして格納
my $hash_ref_comic = {
name => 'Giorno Giovanna',
favorite_foods => $favorite_food_array_ref,
};
# 確認用Data::Dumper
# print Dumper $hash_ref_comic;
# https://ja.wikipedia.org/wiki/リラックマ
# 1.ハッシュを作成
my %hash_sanrio = (
name => 'Rilakkuma',
favorite_foods => [ 'dango', 'hotcake', 'omerice', 'pudding' ],
);
# 2.ハッシュをハッシュリファレンスにする
my $hash_ref_sanrio = \%hash_sanrio;
# 確認用Data::Dumper
# print Dumper $hash_ref_sanrio;
# 1-2 リファレンスを配列に格納
# 1-1で作成した複数のハッシュリファレンスを、1つの配列に格納しましょう。
# 配列の要素として直接記述する書き方
my @array_direct = ( $hash_ref_myself, $hash_ref_comic, $hash_ref_sanrio );
# または配列操作の関数 push を使う書き方
my @array_push = ();
push @array_push, $hash_ref_myself;
push @array_push, $hash_ref_comic;
push @array_push, $hash_ref_sanrio;
# あるいは配列操作の関数 unshift を使う書き方
my @array_unshift = ();
unshift @array_unshift, $hash_ref_sanrio;
unshift @array_unshift, $hash_ref_comic;
unshift @array_unshift, $hash_ref_myself;
# 1-3. ランキングの表示
# どのような方法でも良いので、好きな食べ物のランキングを作って、表示してみてください。
# 食べ物の出現回数を数える用ハッシュ
my %hash = ();
# for文で配列 @array_direct の各要素(ハッシュリファレンス)にアクセスする
for my $hash_ref (@array_direct) {
# ハッシュリファレンス内のkey "favorite_foods"のvalueを
# デリファレンスして、配列に戻す
my @favorite = @{ $hash_ref->{favorite_foods} };
# for文で配列 @favorite から要素(食べ物)を取り出し、
# ハッシュのkeyに設定、valueはインクリメント演算子で
# +1 する
for my $food (@favorite) {
$hash{$food}++;
}
}
# sort文でハッシュの値(食べ物の出現回数)で降順ソートし、
# 配列 @ranking に格納する
my @ranking = sort { $hash{$b} <=> $hash{$a} } keys %hash;
# for文で配列 @ranking から要素を取り出し、
# ハッシュのkeyに設定して出現回数と要素名(好きな食べ物名)を
# 表示する
for my $food (@ranking) {
print $hash{$food}, ':', $food, "\n";
}
# 3:pudding
# 2:chocolate
# 1:omerice
# 1:hotcake
# 1:salad
# 1:dango
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.