keys関数 - ハッシュのすべてのキーを取得
keys関数を使用すると、ハッシュのすべてのキーを取得することができます。取得したキーの順序は不定です。
# すべてのキーを取得 my @keys = keys %hash;
ハッシュのリファレンスを引数として渡す場合は、デリファレンスする必要があります。
# すべてのキーを取得。ハッシュのリファレンスの場合。 my @keys = keys %$hash;
ハッシュのキーと値をすべて出力
keys関数を使って、ハッシュのすべてのキーとすべての値を出力してみます。
# キーの辞書順で並べ替えて出力 my $scores = {Ken => 1, Mike => 2, Rika => 3}; for my $person (sort keys %$scores) { print "$person : $scores->{$person}\n"; }
出力結果は以下のようになります。
Ken : 1 Mike : 2 Rika : 3
keys関数で得られるキーは順序が不定です。sort関数と組み合わせると安定した順序で出力することができます。
# キーの辞書順で並べ替えて出力 my $scores = {Ken => 1, Mike => 2, Rika => 3}; for my $person (sort keys %$scores) { print "$person : $scores->{$person}\n"; }
さらにreverse関数と組み合わせると、逆順で出力することができます。
# キーの辞書順で並べ替えて出力 my $scores = {Ken => 1, Mike => 2, Rika => 3}; for my $person (reverse sort keys %$scores) { print "$person : $scores->{$person}\n"; }
ハッシュの値をすべて取得する
ハッシュの値だけをすべて取得したい場合はvalues関数を使用することができます。
my @values = values %hash;
キーと値のペアを順番に取得する
キーと値のペアを順番に取得したい場合はeach関数を使うことができます。
# (キー, 値)のペアを順番に取得 my %age = (Ken => 19, Mike => 34); while (my ($name, $age) = each %age) { ... }
while文を使って、キーと名前のペアを順番に取り出しています。
keys関数、values関数、each関数という似ている関数がありますが、ハッシュの処理にkeys関数を使うのがお勧めです。keys関数は、パフォーマンスもよく、三つの中で非常に活用のしやすい関数です。