我正在寻找使用perl的哈希搜索实现。我的哈希值中有以下数据
%hash = {0 => "Hello", 1=> "world"}.
现在我想使用值(表示world和hello)搜索哈希并返回相应的键。
示例:我想搜索世界,结果应为1
答案 0 :(得分: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' );
在hashref上执行while ... each
$h = { a => 'b', c => 'd' };
print "$k :: $v\n" while (($k, $v) = each %$h );
c :: d
a :: b
答案 1 :(得分:2)
如果:
您只需使用reverse
创建查找哈希:
my %lookup = reverse %hash;
my $key = $lookup{'world'}; # key from %hash or undef
答案 2 :(得分: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";
这将返回所有键,即如果多个键的值相同。