『Perl言語入門』の5――ハッシュ
2451 ワード
ハッシュとは
ハッシュはデータ構造であり、配列と類似しているのは、任意の多くの値を収容し、必要に応じて使用できることであり、配列とは異なり、配列は常に数字でインデックスされ、ハッシュは名前でインデックスされる.ハッシュのインデックス値はキー(Key)と呼ばれ、任意の一意の文字列です.
いくつかの典型的な応用は、例えば、名前による姓の検索、ホスト名によるIPの検索、単語による出現回数の統計、ユーザー名による一人当たりのディスクブロック数の統計などである.
ハッシュ要素へのアクセス
ハッシュ要素にアクセスするには、次の構文を使用します.
ハッシュには自分の名前のネーミングスペースがありますが、ハッシュ名を選ぶときは、ハッシュ名とキーの間に「for」の字を入れることができるようにしたほうがいいです.例えば、「family_name for fredはflintstoneです」などです.
ハッシュテーブルに存在しない値にアクセスするとundefが得られます.
ハッシュ全体を指すには、パーセンテージ記号を接頭辞として使用します.
よく使われるハッシュ
ハッシュわりあて
既存のハッシュに基づいて、逆シーケンスのハッシュを作成します.
なお、このテクニックは、元のハッシュの値が一意であることを決定する場合に使用することが望ましい.
ハッシュ・テーブルのキー値ペアを区別するために、Perl言語ではカンマの代わりに太い矢印("=>")を使用できます.たとえば、
ハッシュ関数
Keysとvalues関数――keys関数はハッシュのキーリストを返すことができ、values関数は対応する値リストを返すことができる.
each関数は、ハッシュリスト全体を反復的に処理する必要がある場合に使用することができる.
ハッシュはデータ構造であり、配列と類似しているのは、任意の多くの値を収容し、必要に応じて使用できることであり、配列とは異なり、配列は常に数字でインデックスされ、ハッシュは名前でインデックスされる.ハッシュのインデックス値はキー(Key)と呼ばれ、任意の一意の文字列です.
いくつかの典型的な応用は、例えば、名前による姓の検索、ホスト名によるIPの検索、単語による出現回数の統計、ユーザー名による一人当たりのディスクブロック数の統計などである.
ハッシュ要素へのアクセス
ハッシュ要素にアクセスするには、次の構文を使用します.
$hash{$some_key}
$family_name{ 'fred' } = 'flintstone';
$family_name{ 'barney' } = 'rubble';
ハッシュには自分の名前のネーミングスペースがありますが、ハッシュ名を選ぶときは、ハッシュ名とキーの間に「for」の字を入れることができるようにしたほうがいいです.例えば、「family_name for fredはflintstoneです」などです.
ハッシュテーブルに存在しない値にアクセスするとundefが得られます.
ハッシュ全体を指すには、パーセンテージ記号を接頭辞として使用します.
%some_hash = ('foo', 35, 'bar', 12.4, 2.5, 'hello', wilma, 1.72e30, 'betty', 'bye
'); #
@any_array = %some_hash # , - 。
よく使われるハッシュ
if (exists $books{"dino"}) { # exists
print "Hey, there's a library card for dino!
";
}
my $person = "betty";
delete $books{$person}; # , , , 。
print "PATH is $ENV{PATH}
"; # PATH
ハッシュわりあて
既存のハッシュに基づいて、逆シーケンスのハッシュを作成します.
my %inverse_hash = reverse %any_hash;
なお、このテクニックは、元のハッシュの値が一意であることを決定する場合に使用することが望ましい.
ハッシュ・テーブルのキー値ペアを区別するために、Perl言語ではカンマの代わりに太い矢印("=>")を使用できます.たとえば、
my %last_name = (
'fred' => 'flintstone',
'dino' => undef,
barney => 'rubble', # ,
betty => 'rubble', # ,
);
ハッシュ関数
Keysとvalues関数――keys関数はハッシュのキーリストを返すことができ、values関数は対応する値リストを返すことができる.
my %hash = ('a' => 1, 'b' => 2, 'c'=>3);
my @k = key %hash; # 'a', 'b', 'c'
my @v = values %hash; # 1, 2, 3
my $count = keys %hash; # 3,
each関数は、ハッシュリスト全体を反復的に処理する必要がある場合に使用することができる.
while ( ($key, $value) = each %hash ) {
print "$key => $value
";
}