2

perlを使用したハッシュの検索実装を探しています。ハッシュに次のデータがあります

%hash = {0 => "Hello", 1=> "world"}. 

ここで、値 (world と hello を意味する) を使用してハッシュを検索し、対応するキーを返したいと思います。

例: world を検索したいのですが、結果は 1 になるはずです

4

3 に答える 3

3

ステートメントを使用してハッシュのキーを繰り返しfor ( keys %hash ) ...、値を確認します。探しているものが見つかったら、戻ってください

my $hash = { 0 => "World", 1 => "Hello" };

for ( keys %$hash ) {
    my $val = $hash->{$_};
    return $_ if $val eq 'World'; # or whatever you are looking for
}

別のオプションは、使用することですwhile ( ... each ... )

my $hash = { 0 => "World", 1 => "Hello" };

while (($key, $val) = each %$hash) {
    return $key if $val eq 'World'; # or whatever you are looking for
}

リテラルを使用すると{ }、ハッシュではなくハッシュ参照が作成されます

$h = { a => 'b', c => 'd' };

使用するリテラル ハッシュを作成するには( )

%h = ( a => 'b', c => 'd' );

while ... eachハッシュリファレンスでの実行

$h = { a => 'b', c => 'd' };
print "$k :: $v\n" while (($k, $v) = each %$h );  

c :: d
a :: b
于 2012-04-17T05:07:00.857 に答える
2

もしも:

  1. ハッシュはそれほど大きくなく、
  2. 値は一意です

次のようにルックアップ ハッシュを簡単に作成できますreverse

my %lookup = reverse %hash;
my $key = $lookup{'world'}; # key from %hash or undef
于 2012-04-17T05:41:48.433 に答える
0
use strict;
use warnings;

my %hash = (0 => "Hello", 1=> "world");
my $val = 'world';

my @keys = grep { $hash{$_} eq $val } keys %hash;

print "Keys: ", join(", ", @keys), "\n";

これにより、すべてのキーが返されます。つまり、値が複数のキーで同じ場合です。

于 2012-04-17T07:07:52.220 に答える