§4.1 ハッシュ


作成日:2001/07/07(土)

第2章、第3章と、Perlの基本的なデータ型であるスカラーと配列について見て来ました。 この章では、データ型の最後、ハッシュについて紹介します。 ハッシュは別名を連想配列といい、ある種配列に似ています。 第3章で扱った配列との大きな違いは、配列はインデクスという0から始まる整数によって、特定の値を参照したり、種々の演算をしたりしていたのに対し、ハッシュの場合、「キー」と呼ばれる文字列によって、個々の値へアクセスするという点です。 そのため、ハッシュの個々の値には順序はありません。

ハッシュは「キー」によって個々の「値」にアクセスする

ハッシュの作り方

ハッシュをつくるには、

 %hash

のように書きます。 ハッシュの先頭は%(半角パーセントマーク)です。 その次に続くのがハッシュ名です。 ハッシュ名にはアルファベットと数字、それにアンダースコア(_)が使えます。 またスカラー、配列と同様、英文字の大文字と小文字は区別します。 さらに、しつこいようですが$nameと@name、%nameは名前はみんな同じでも、別々の物として扱ってくれます。

次に、ハッシュにキーと値のリストをセットすることを考えましょう。 品物をキーとし、値段を値とするハッシュを作ります。 対応表は以下のとおりです。

品物 値段
bread 80
milk 50
salad 100

上の表をもとにしてハッシュ%menuを作るには、

 %menu = ("bread", 80, "milk", 50, "salad", 100);

のように、キーと値を交互に書きます。 ですが、これではキーと値の対応関係がハッキリしないので、Perl5からは、

 %menu = (
    "bread" => 80,
    "milk" => 50,
    "salad" => 100,
 );

という書き方もサポートされました。
 また空のリストを代入することも出来ます。 これはハッシュを初期化するときに使います。

 %empty = ();

さらに、ハッシュのキーと値を、配列に代入することも出来ます。

 @menu = %menu;

ただし、上にも書いたようにハッシュのキーと値の組には順序はありません。 なので上の結果は、ハッシュに代入したときと同じになるとは限りませんし、上と同じことを3回行ったときには、3回ともばらばらの順番で、キーと値の組がセットされます。

ハッシュの個々の値にアクセスするには、

 $menu{"bread"};  #値80にアクセス
 $menu{"milk"};   #値50にアクセス
 $menu{"salad"};  #値100にアクセス

のように書きます。 $の後にハッシュ名を書いて、その後にアクセスしたい値のキーを{ }で囲んで書きます。 また新たに要素を追加するには代入演算子=を使います。

 $menu{"juice"} = 80;  #キー"juice"に値80をセット

値を変更するときも同様です。

さて、第3章で登場したスライス。 覚えてますか? スライスは配列の複数の値にアクセスする時に使うものでしたが、実は、ハッシュにも使えます。 例えば、

 @menu = @menu{"bread", "milk"};

とすると、左辺の@menuには、ハッシュ%menuのキー"bread"、"milk"に対応する値(50と100)がセットされます。 右辺で%ではなく@を使っているところに注意してください。

さて、この節ではハッシュの作り方と、個々の値へのアクセスについて書いてきました。 次の節ではハッシュを操作する関数をいくつか紹介します。


「§3.5 コンテキスト」へ 「§4.2 ハッシュを操作する」へ
ソフトバンク パブリッシング株式会社

Copyright (C) can All Rights Reserved
e-mail:ishiki@mrj.biglobe.ne.jp