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

我想获取与墨西哥相关的密钥。我怎么能得到那个?

试过:

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

2 回答 2

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

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

于 2013-08-02T23:10:50.933 回答
2
print grep { $hash1{$_}[0] =~ /mexico/ } keys %hash1;

如果哈希值是具有多个元素的数组,

print grep { grep { $_ eq "mexico" } @{$hash1{$_}} } keys %hash1;
于 2013-08-03T10:27:41.657 回答