如何使用值搜索哈希值,并在perl成功时返回相应的键

时间:2012-04-17 05:04:24

标签: perl hashtable

我正在寻找使用perl的哈希搜索实现。我的哈希值中有以下数据

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

现在我想使用值(表示world和hello)搜索哈希并返回相应的键。

示例:我想搜索世界,结果应为1

3 个答案:

答案 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)

如果:

  1. 哈希值非常大,
  2. 值是唯一的
  3. 您只需使用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";

这将返回所有键,即如果多个键的值相同。