ハッシュ
■この章で解説する組み込み関数
delete, keys, values, each, exists■この章でできること
・ハッシュにキー、値を追加する
・ハッシュからキー、値を削除する
・ハッシュのキーを指定して値を取得する
・ハッシュの全てのキーを取得する
・ハッシュの要素数を取得する
・ハッシュの全ての値を取得する
・ハッシュのキーと値を反復して取り出す
・ハッシュにキーが存在するかどうかを調べる
・ハッシュを初期化する
ハッシュはキー、値をペアにしたデータ型です。まずは、サンプルを見てみましょう。
#!/usr/bin/perl ############################################# # ハッシュのサンプル # Author: "Perl Programming Tips" ############################################# %hash1 = ("tanaka"=>333, "yamada"=>444, "sato"=>555); # キー、値を追加 $hash1{"suzuki"} = 666; # キー、値を削除 delete($hash1{"sato"}); # キーを指定して値を取得 $value = $hash1{"yamada"}; print "value:$value\n"; # 全てのキーを取得 @key = keys(%hash1); print "key:@key\n"; # ハッシュの要素数を取得 $num = keys(%hash1); print "num:$num\n"; # 全ての値を取得 @value = values(%hash1); print "value:@value\n"; # キーと値を反復して取り出す while (@pair = each(%hash1)) { print "pair:@pair\n"; } # キーが存在するかどうかを調べる print "key:tanaka " . exists($hash1{"tanaka"}) ."\n"; print "key:sato " . exists($hash1{"sato"}) ."\n"; # ハッシュの初期化 %hash1 = (); $num = keys(%hash1); print "num:$num\n";
実行結果は次のようになります。
[g@630m pl]$ perl hash01_01.pl value:444 key:yamada suzuki tanaka num:3 value:444 666 333 pair:yamada 444 pair:suzuki 666 pair:tanaka 333 key:tanaka 1 key:sato num:0 [g@630m pl]$
ハッシュの初期化時に初期値を設定するには、次のように記述します。
%ハッシュ名 = (キー=>値, キー=>値);
また、ハッシュにキー、値を追加するには、次のように記述します。
$ハッシュ名{キー} = 値;
ハッシュからキー、値を削除するには、delete関数を使います。
delete
ハッシュからキー、値を削除する。
書式
delete $hash{key}
delete @hash{@keys}
delete @hash{@keys}
引数
hash:
ハッシュ
key:
キー
戻り値
なし
ハッシュのキーを指定して対応する値を取得するには、次のように記述します。値はスカラー値なので、$ハッシュ名となることに注意してください。
$値 = $ハッシュ名{キー};
ハッシュから全てのキーを取得するには、keys関数を使います。また、keys関数の戻り値をスカラーコンテキストで取得した場合は、ハッシュの要素数が返ります。
keys
ハッシュから全てのキー、または要素数を取得する。
書式
keys %hash
引数
hash:
ハッシュ
戻り値
リストコンテキストの場合全てのキーからなるリスト、スカラーコンテキストの場合要素数
これに対して、ハッシュから全ての値を取得するにはvalues関数を使います。
values
ハッシュから全ての値を取得する。
書式
valuss %hash
引数
hash:
ハッシュ
戻り値
全ての値からなるリスト
ハッシュからキーと値のペアを1つずつ取得して反復処理をしたい場合は、each関数を使います。ハッシュは内部で反復子(iterator)を持っているので、each関数を繰り返し呼び出すことによって、キーと値を1つずつ取り出せるようになっています。
each
ハッシュからキーと値のペアを反復して取得する。
書式
each %hash
引数
hash:
ハッシュ
戻り値
リストコンテキストの場合、キーと値のペアからなる2値のリスト。最後まで取得したら空のリストを返す。スカラーコンテキストの場合、キーのみを返す。
もし、反復子を途中でリセットしたい場合は、スカラーコンテキストでkeys関数を実行するとリセットされます。
次に、ハッシュの中に特定のキーが存在するかどうかを調べるには、exists関数を使います。
exists
ハッシュの中に特定のキーが存在するかどうかを調べる。
書式
each $hash{$key}
引数
hash:
ハッシュ
key:
キー
戻り値
キーがハッシュに存在すれば(値が未定義であっても)真を返す。
最後に、ハッシュを初期化したい場合は、次のように記述します。
%ハッシュ名 = ();