Perl:查找数组哈希的键

时间:2013-08-02 22:59:01

标签: perl hash hashmap

    my %hash1 = (
    a => ["turkey, mexico"],
    b => ["india, china"],
    c => ["england, vietnam"],
    d => ["usa"],
);

我想获得与墨西哥有关的钥匙。 我怎么能得到它?

试过:

print @($a{$hash1{"mexico"}})

2 个答案:

答案 0 :(得分:4)

也许你要么遍历哈希键并返回包含它的数组,要么你创建另一个哈希。对于第二个,它可能看起来像这样:

my %newhash;
for my $key (keys %hash1) {
  my @list = split /, / => $hash1{$key}[0];
  # or perhaps: my @list = map split(/, /, $_), @{ $hash1{$key} };
  for (@list) {
    $newhash{$_} = $key;
  }
}
$newhash{mexico} eq 'a'; #true

这不是非常有效,但它会起作用。

答案 1 :(得分:2)

print grep { $hash1{$_}[0] =~ /mexico/ } keys %hash1;

并且在散列值是具有多个元素的数组的情况下,

print grep { grep { $_ eq "mexico" } @{$hash1{$_}} } keys %hash1;