Perlのハッシュの使い方チュートリアル
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";
}
関連
-
Perlの基本的な配列のソート方法
-
Windowsにperlとkomodo IDEをインストールする詳細な手順
-
Perlのeval関数の使用例
-
スペースがセパレータである場合の perl qw 問題の解決法
-
ssh ログインの最大数を制限する perl スクリプト (ホワイトリスト対応)
-
Javaプログラマのための10分でわかるPerlチュートリアル
-
[解決済み] Hashに重複したキーや値を持たせることができるか
-
[解決済み] Perlで画面をクリアする方法は?
-
[解決済み] Perlで日付/時刻をエポックタイム(1970年からのunix時間/秒)に変換するには?
-
[解決済み] スクリプトからの不正なヘッダー。不正なヘッダー=<!DOCTYPE html> です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Perlの文字列処理関数
-
Perlの配列ソート学習ノート
-
PerlでローカルタイムからUNIXタイムスタンプに変換する方法
-
perlを使ってデータテーブル(mysql)を分割し、データインスタンスを移行する。
-
Perl の Getopt::Long モジュールを使用して、ユーザーのコマンドライン引数を受け取ります。
-
Perl 変数の使い方を説明するための Perl 構文
-
Perl で File::Lockfile を使用して、スクリプトの単一インスタンスを確保する
-
Perl AnyEvent ウォッチャーの例
-
[解決済み] "デバイスに不適切なioctl"
-
[解決済み] perl で awk コマンドを実行する