最小値を求めてみよう
最小値を求める方法をPerlプログラムを用いて説明します。
配列の最小値を求めてみよう。
以下のような1~10までの正の数のみが含まれる配列を考えてみます。
my @array = (8, 1, 3, 5, 7);
配列の最小値を求めるサンプルプログラム
実際に配列から最小値を求めます。List::Utilモジュールにmin関数がありますが、この例では利用しません。
最小値を保存するための変数を用意し、配列の要素と1つずつ比較することで最小値を求められます。
※最小値を保存する変数の初期値は、あらかじめ1~10の数値と比較する条件にしているため、十分に大きい99を初期値に設定しています。
比較する数値の範囲がわからない場合は、工夫をして比較する必要があります。
use strict; use warnings; my @array = (8, 1, 3, 5, 7); my $min = 99; for my $num (@array) { if ($min > $num) { $min = $num; } } print "$min\n";
実行結果
1
1つ1つ比較していて処理がとてもわかりやすいかと思います。
※コードを単純化するために1~10までの正の数のみが含まれる配列を扱います。
表形式のデータから、特定の列の最小値を求めてみよう。
最大値を求める際にも使った以下のデータを考えてみましょう。
name | age |
---|---|
bob | 9 |
tom | 14 |
alice | 11 |
配列,ハッシュのリファレンスで表すと以下のようになります。
$array_ref = [ {name => 'bob', age => 9}, {name => 'tom', age => 14}, {name => 'alice',age => 11} ];
age列の最小値を求めるサンプルプログラム
参照するデータが複雑になったためデータアクセスも少し難しくなりましたが、
チェックする方法は先ほどと同じです。
use strict; use warnings; my $array_ref = [ {name => 'bob', age => 9}, {name => 'tom', age => 14}, {name => 'alice',age => 11} ]; my $min = 99; for my $info (@{$array_ref}) { if ($min > $info->{'age'}) { $min = $info->{'age'}; } } print "$min\n";
実行結果
9
リファレンスを扱った以外は先ほどと同じ処理になります。
このプログラムは、コピー&ペーストして、PerlBanjoで、すぐに試すことができます。