2

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

%hash = {0 => "Hello", 1=> "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在 hashref 上执行

$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 回答