ハッシュと繰り返し処理

ハッシュに含まれる要素を順に取り出して処理するといったことはよく行われる処理です。ただ配列と異なりインデックスを使って要素にアクセスするわけではないので for 文ではなく foreach 文または while 文を使用します。ここでは Perl で繰り返し処理を使ってハッシュを扱う具体的な方法について解説します。

(Last modified: )

ハッシュと繰り返し処理

繰り返し処理としては色々な方法があると思いますが、ハッシュの場合は while 文または foreach 文を使いことが多いと思います。

foreach 文の場合にはハッシュに含まれるキーのリストを作成し順に取り出して処理することになります。次のように記述できます。

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区"
);

foreach my $key(keys(%address)){
  print "$address{$key}\n";
}

keys 関数は対象となるハッシュに含まれているすべてのキーをリストの形で返します。詳しくは「keys関数:ハッシュに含まれているすべてのキーをリストとして取得する」を参照して下さい。

キーと値をペアで順に取り出す場合には while 文を使います。次のように記述できます。

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区"
);

while (my ($key, $value) = each(%address)){
  print "key=$key, value=$value\n";
}

each 関数は対象となるハッシュに含まれている要素を順に取り出します。詳しくは「each関数:ハッシュに含まれている要素を順に取得する」を参照して下さい。

ハッシュの要素には順序がありませんので、どちらの場合も要素がどのような順序で取り出されるかは分かりません。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区",
"伊藤" => "大阪府吹田市",
"高橋" => "愛知県名古屋市"
);

foreach my $key(keys(%address)){
  print "$address{$key}\n";
}

print "----\n";

while (my ($key, $value) = each(%address)){
  print "key=$key, value=$value\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

ハッシュと繰り返し処理(1)

ハッシュから foreach 文と while 文を使って順に要素を取得しました。

-- --

Perl で繰り返し処理を使ってハッシュを扱う具体的な方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。