1. ホーム
  2. スクリプト・コラム
  3. パール

Perlのハッシュの使い方チュートリアル

2022-01-30 01:26:16

I. Perlのハッシュとは

ハッシュは配列に似たデータ構造で、値を格納したり、値を取り出したりすることができます。しかし、配列とは異なり、そのインデックスは数値ではなく名前である。つまり、インデックス(ここではキーと呼ぶ)は数値ではなく、任意の一意な文字列である。

キーにはどんな文字列でも使うことができますが、一意です。
ハッシュのもう一つの考え方は、データの樽で、それぞれに対応するタグがあることです。このタグに対応する要素には、タグを通してアクセスすることができます。しかし、quot;first" という概念はありません。配列では、配列の要素に0,Perl学習ハッシュ_馬亮のコンピュータ技術1,2と番号が振られる。しかし、ハッシュの場合は順番が定義されていないので、最初の要素はありません。キーと値のペアの集まりに過ぎないのです。

キーも値も任意のスカラーであるが、キーは通常文字列に変換される。つまり、50/20という式をキーとした場合、通常は3文字の文字列 "2.5" に変換されるのです。
Perlの設計思想であるquot;no unnecessary restrictions"により、ハッシュは空のハッシュ(キーと値のペアがない)からメモリが許す限りどんなサイズにもすることができるのです。
ハッシュの値は、数値、文字列、undef、またはそれらの混合であってもよいが、キーは一意である。

なぜPerlのHashを使うのか

ハッシュを単純なデータベースと考え、それぞれのキーの下にデータの塊を置くことができます。もし、あなたのタスクが、quot;lookup duplicates", "uniques", "cross reference", "lookup tables " ならば、ハッシュは、ハッシュのPerl学習_马亮的计算机技の上であなたのこの種のアプリケーションで役に立つと思われます。

II. Perlのハッシュ要素へのアクセス

ハッシュ要素にアクセスするには、次の構文を使用します。$hash{$some_key}を使用します。
これは、配列の要素にアクセスするのと多少似ていますが、添え字(キー)に角括弧([ ])の代わりに括弧({})が使用されています。key の式は、数値ではなく文字列になっています。
ハッシュの名前はPerlの他の識別子の命名規則と同じです(文字、数字、アンダースコアで構成され、数字で始まらない)。
存在しないハッシュ要素にアクセスすると、undef が返されます。

1. Perlのハッシュの全体像

ハッシュ全体を参照する場合は、パーセント記号(%)をプレフィックスとして使用します。
便宜上、ハッシュはリストに変換することができ、またその逆も可能である。

2. Perl ハッシュの代入

以下の構文で、ハッシュ間のコピーができます。
new_hash = %old_hash;
ハッシュを他の形式に変換する方が一般的である。例えば、ハッシュを反転させることができる。
%inverse_hash = 逆の %any_hash です。

3. 大きな矢印記号(=>)

ハッシュに値を代入する際、どの要素がキーでどの要素が値なのかがわからないことがあるため、大きな矢印記号(=>)が考案されました。コンマが必要なときはいつでも、大きな矢印の記号に置き換えることができる。
例えば

コピーコード コードは以下の通りです。

my %last_name = (  
"www" => 1,  
"eee" => 2,  
); 

三、PerlのHash関数

いくつかの便利な関数はハッシュ全体を操作することができます。

1. キーと値の関数

keys関数はこのハッシュのすべてのキーを返し、values関数はすべての値を返します。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3);  
print my @k = keys %hash;  
print my @v = values %hash; 

2.各機能

ハッシュの各要素を反復処理したい場合、一般的な方法として、キー/値に対応する2つの要素のリストを返すeach関数を使用します。
同じハッシュ関数を1回反復する場合、すべての要素にアクセスするまで次のキーと値のペアが返されます。もしそれ以上キーと値のペアがなければ、各関数は空のテーブルを返します。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3);  
while(($key, $value) = each %hash)  
{  
print "$key => $value\n";  

それぞれが返すキーと値のペアは、もちろん、混乱した順序になっています(それは、その順序は、キーと値の関数が返す順序と同じです)。もし、それらを順番に並べたいなら、(sortを使って)ソートすればいい。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);  
foreach $key (sort keys %hash)  
{  
$value =$hash{$key};  
print "$key => $value\n";  

IV. Perl ハッシュの一般的な使用法

1. 存在する機能

あるキーがハッシュ内に存在するかどうかを確認するには、exists関数を使用します。この関数は、対応する値があるかどうかにかかわらず、そのキーがハッシュ内に存在する場合に真を返します。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);  
if(exists $hash{'a'})  
{  
print "true";  

2.削除機能

delete関数は、与えられたキー(それに対応する値を含む)をハッシュから削除します。そのキーが存在しない場合は何もせず、警告やエラーメッセージもありません。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);  
delete $hash{'a'};  
foreach $key (sort keys %hash)  
{  
$value =$hash{$key};  
print "$key => $value\n";  

3. Perl Hash 要素の補間

二重引用符で囲まれた文字列の中で、単一のハッシュ要素を使用することはできますが、ハッシュ全体の補間はサポートされていません。

コピーコード コードは以下の通りです。

my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);  
foreach $key (sort keys %hash)  
{  
print "$key => $hash{$key}\n";  
}