perlを使用したハッシュの検索実装を探しています。ハッシュに次のデータがあります
%hash = {0 => "Hello", 1=> "world"}.
ここで、値 (world と hello を意味する) を使用してハッシュを検索し、対応するキーを返したいと思います。
例: world を検索したいのですが、結果は 1 になるはずです
ステートメントを使用してハッシュのキーを繰り返し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
もしも:
次のようにルックアップ ハッシュを簡単に作成できますreverse
。
my %lookup = reverse %hash;
my $key = $lookup{'world'}; # key from %hash or undef
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";
これにより、すべてのキーが返されます。つまり、値が複数のキーで同じ場合です。