ハッシュの宣言と基本的な使い方

ハッシュを利用するにはまずハッシュの宣言を行う必要があります。宣言を行ったハッシュに対してはキーと値のペアを要素に格納することができます。ここでは Perl におけるハッシュの宣言を行う方法とハッシュの基本的な使い方について解説します。

(Last modified: )

ハッシュとは

複数の値を管理するものとして配列については既に解説しました。配列に格納される要素は順序を持って格納されており、インデックスと呼ばれる数値で管理していました。

複数の値をまとめて管理するためにインデックスを使うのは大変簡潔で便利です。ただ、例えば名前に関連付けて住所や電話番号を管理したい場合には少し面倒です。配列でこのようなことを行うとすれば、まず名前を管理する配列を用意し、ある名前を格納します。そして住所の配列を別途用意し、対応する名前に割り当てられているインデックスを調べ、住所の配列に同じインデックスで名前に対応した住所を格納します。

my @name;
my @address;

$name[0] = "katou";
$address[0] = "Tokyo";

このような場合にはハッシュを使うと大変便利です。ハッシュは他のプログラミング言語では連想配列とも呼ばれているもので、複数の値を管理することは配列と同じですが、要素を順に並べてインデックスで管理するのではなく、格納される値に対するキーを別途設定しインデックスの代わりにキーで管理します。

キーには任意の文字列を指定できます。その為、例えばキーに名前を指定しておけば、その名前に対応した値を取り出すことが行えます。例えば先ほどの例をハッシュを使って記述すると次のようになります。

my %address;

$address{'katou'} = "Tokyo";

配列ではインデックスを指定していた箇所にキーとなる文字列が指定されています。このようにハッシュではキーと値をペアとして格納していきます。ハッシュから値を取り出す時も同じです。

my %address;

$address{'katou'}= "Tokyo";
print "$address{'katou'} \n";

配列の場合と比べて "katou" と言う名前に対する住所を取り出すのが直接的で分かりやすくなっています。ハッシュを使うことで、極めて簡単なデータベースのように何かに対応する値を取り出すといったことが用意となります。

ハッシュを宣言する

変数や配列の場合と同じくハッシュを使用する場合も宣言を行います。変数の場合はプレフィックス名として $ を使用し、配列の場合は @ を使用しますがハッシュの場合は % を使用します。

%ハッシュ名

例えばハッシュ名として name を使ったハッシュを宣言する場合は次のようになります。

my %name;

ハッシュは配列と同じく複数の値を管理しており、 1 つ 1 つは要素と呼ばれ要素はそれぞれ変数です。要素に対する扱いは配列と同じく1つの値を管理できる変数をまとめて管理することにより複数の値を管理できるようになっています。

1 つのハッシュで管理できる要素数も制限はありません。また宣言時に要素数を指定する必要もありません。

ハッシュの要素への値の格納と取得

ハッシュではキーと値をペアで要素に格納します。配列の場合と異なりハッシュでは格納された値に順序はありません。複数の値が格納されている時にどんな並びで格納されているかは決まっていません。その代わり値に対するキーを同時に登録し、格納された値はキーを指定することにより取り出します。

その為、同じハッシュでは同じキーを使って値を格納することはできません。(値は重複していても構いません)。

具体的にハッシュに値を格納するには次のように行います。

$ハッシュ名{キー} = 値;

ハッシュに含まれる要素は 1 つ 1 つが変数ですので、キーを指定して値を格納する場合は、プレフィックスが % ではなくて $ となりますので注意して下さい。配列の場合はインデックスを [] で囲いましたがハッシュの場合はキーを {} で囲います。

キーには任意の文字列を指定します。文字列そのものだけではなく、文字列が格納された変数なども指定できます。

my %name;

$name{"山田"}= "花子";

my $str = "鈴木";
$name{$str}= "一郎";

配列の場合と異なり順序がありませんので、新しいキーに対して値を設定すると要素が自動的に追加されます。既にあるキーに対して値を設定すれば格納されていた値が上書きされます。

要素に格納された値を取得する場合も変数や配列の場合と基本的に代わりありません。ハッシュの要素の場合は $ハッシュ名{キー} で参照できます。

my %name;

$name{"鈴木"}= "一郎";
$name{"山田"}= "花子";

print "$name{\"鈴木\"}\n";
print "$name{'山田'}\n";

print 関数の中でキーを指定する場合、ダブルクオーテーションで文字列を記述する場合は \ を使ってエスケープしてください。シングルクオーテーションの場合はそのまま記述できます。

サンプルコード

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

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

my %namedb;

$namedb{"鈴木"}= "一郎";
$namedb{"山田"}= "花子";

print "$namedb{\"鈴木\"}\n";
my $name = "山田";
print "$namedb{$name}\n";

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

perl sample.pl

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

ハッシュの宣言と要素へのアクセス(1)

ハッシュを作成したあと、キーを指定して値を取得しました。

-- --

Perl におけるハッシュの宣言を行う方法と、ハッシュの要素に対してアクセスする方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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