最小値を求めてみよう

最小値を求める方法を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までの正の数のみが含まれる配列を扱います。

表形式のデータから、特定の列の最小値を求めてみよう。

最大値を求める際にも使った以下のデータを考えてみましょう。

nameage
bob9
tom14
alice11

配列,ハッシュのリファレンスで表すと以下のようになります。

$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で、すぐに試すことができます。

関連情報