11

次のハッシュがあります。

my %villains = {
    "Boba" => "Fett",
    "Darth" => "Vader",
    "Moff" => "Tarkin",
}

次に、次のように印刷します。

print "".%villains;

次の出力が得られます。

1/8

これを実現する Perl のセマンティクスは何ですか?

ありがとうございました!

4

2 に答える 2

13

スカラーコンテキストでハッシュを評価しています。これを行うと、ハッシュが使用されていない場合は false と評価されない限り、実際には、バケットの総数に対するタッチされたバケットの数の一部が返されます。詳細については、この perldocを参照してください (セクションの終わり近く)。

于 2013-09-26T05:57:06.767 に答える
4

スカラー コンテキストでハッシュを評価すると、ハッシュが空の場合は false が返されます。キーと値のペアがある場合は true を返します。より正確には、返される値は、使用されたバケットの数と割り当てられたバケットの数をスラッシュで区切った文字列です。これは、Perl の内部ハッシュ アルゴリズムがデータ セットでうまく機能していないかどうかを確認する場合にのみ非常に役立ちます。

これは、ハッシュの内部に不慣れな人のために説明を使用することができます: アイテムがハッシュに追加されると、ハッシュアルゴリズムに基づいてバケットに配置されるため、より効率的に取得できます。

あなたはおもちゃの車を集めています。車を簡単に見つけるために、色に基づいて異なるバケツに入れることにしました。の車用のバケツがあります。

新しいのフォード マスタングをコレクションに追加して、のバケットに入れます。次にこの車を見つけたいときは、のバケツに直接移動して、検索対象を絞り込むことができます。

この例では、車のコレクションは でhash、各車は でhash entry、色はhashing algorithmです。コレクションには赤、青、黒の車も含まれているため4/5、バケツを使用してかなり効率的に配置されています。

ただし、このシステムを赤い車のコレクションに使用する場合、ハッシュ アルゴリズムは非常に非効率的になります。バケットのみを使用1/5し、特定の車を見つけるには、コレクション全体を検索する必要があります。

于 2013-09-26T09:34:31.650 に答える