最小値を求めてみよう
最小値を求める方法を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で、すぐに試すことができます。
Perlデータ分析入門