Perl入門
> 第4章 ハッシュ変数
第4章 ハッシュ変数
4-1. ハッシュ変数とは
ハッシュ
とは、
連想配列
とも呼ばれ、「キー」と「値」を1組のペアとして関連付けされた配列です。ただし、配列自体は順序付けされていないところに特徴があります。
ハッシュの変数のことを、
ハッシュ変数
といい、% (パーセント) + 英字1文字から始まり、それ以降は数字、英字およびアンダースコア ( _ ) を用いることができます。また大文字と小文字が区別されますので、たとえば
%a
と
%A
は別物として扱われます。
4-2. ハッシュ変数の操作
ハッシュ変数は、キーと値をペアにして、数値や文字列を代入します。
構文例
意味
%fruit = ("red", "apple", "yellow", "banana");
%fruit に red と apple 及び yellow と banana という文字列をそれぞれのペアで代入
また、このように定義したハッシュは読みづらいことがあるので、Perl5に限ってコンマの代わりに、
=>
(等号、大なり) という区切り記号が用意されています。これを使うことで、キーと値の違いを明確にあらわすことができます。
パターン1
%fruit = ("red", "apple", "yellow", "banana");
パターン2
%fruit = (
"red" => "apple",
"yellow" => "banana",
);
ハッシュ変数の中の各要素(各ペア)は、
$ハッシュ変数名 { キー }
という形式で、それに対応する「値」を参照することができます。
以下の表の場合、パターン1とパターン2は、まったく同じ意味になります。
パターン1
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
パターン2
$fruit{"red"} = "apple";
$fruit{"yellow"} = "banana";
$fruit{"purple"} = "grape";
ハッシュ変数の各要素には、「キー」を指定することで「値」にアクセスすることができます。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
print "$fruit{'red'}
\n
";
<出力結果>
apple
4-3. ハッシュ関数
ハッシュを操作するための関数として、次のような関数が用意されています。
関数
意味
keys
すべてのキーを取り出す
values
すべての値を取り出す
each
1組のキーと値を取り出す
delete
特定の要素を取り除く
keys
すべてのキーを取り出します。取り出された配列の順序は一定でないことに注意します。これはハッシュが順序付けられた配列でないためです。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
@file = keys (%fruit);
print "@file
\n
";
<出力結果>
purple yellow red
values
すべての値を取り出します。keys関数同様、取り出された配列の順序は一定ではありません。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
@file = values (%fruit);
print "@file
\n
";
<出力結果>
grape banana apple
each
1組のキーと値を取り出します。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
($key, $val) = each (%fruit);
print "
キー
$key
値
$val
\
n";
<出力結果>
キー purple 値 grape
しかしながら、上記の場合、どのペアが取り出されるかが不定であり、しかも1組だけが抽出されるので、通常 each関数の場合は次のようにwhile構文と併用した形で使用されます。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
while ( ($key, $val) = each (%fruit) ) {
print "
キー
$key
値
$val
\
n";
}
<出力結果>
キー purple 値 grape
キー yellow 値 banana
キー red 値 apple
delete
特定の要素を取り除きます。変数によるキーを指定することで、そのキーと値のペアをハッシュから削除します。
%fruit = ("red", "apple", "yellow", "banana", "purple", "grape");
delete $fruit{"yellow"};
while (($key, $val) = each (%fruit)) {
print "
キー
$key
値
$val
\
n";
}
<出力結果>
キー purple 値 grape
キー red 値 apple
戻る