1

如何获取所有值并打印它,在代码中每个键都有多个值

%ages = (
" Michael Caine" => {39,34,11,12},
" Dirty Den" => {34,56,76,58},
" Angie" => {27,56,78,89}
);    

@keys = keys %ages;
@val = values %ages;
print @keys;
print @val; #it will not work in case of multiple values per key
4

3 回答 3

3

你有三个问题。

  1. 您使用的是 hashrefs,而不是 arrayrefs
  2. 你没有分配任何东西@val(至少,在你编辑问题之前你没有分配任何东西)
  3. 你没有做任何事情来取消引用你的引用

这样的:

use v5.10;

my %ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89]
);    

foreach my $key (keys %ages) {
    say $key;
    say @{$ages{$key}};
}
于 2012-08-07T10:52:07.820 回答
1

Bhargav Gor,bhai,这是为一个键存储多个值的常用方法。

但,

  1. 请记住,这是一个匿名哈希,即键值对: {39,34,11,12} = ("39"=>34, "11"=>12)

  2. 这是一个匿名数组: [ 39,34,11,12 ]

您使用了 1. 这意味着您正在使用另一个哈希作为 %ages 哈希的值,即

%ages =
" Michael Caine" => ("39"=>34,"11"=>12),
" Dirty Den" => ("34"=>56,"76"=>58),
" Angie" => ("27"=>56,"78"=>89)

如果要提取键“Michael Caine”的键“39”的值

print %{$ages{" Michael Caine"}}->{"39"}  #prints 34

如果你真的想要这样的结构,那么这就是你可以显示所有值的方式

foreach(keys %ages) {
  $name = $_;
  foreach(keys %{$ages{$name}}) {
    print %{$ages{$name}}->{$_},",";
  }
  print "\n";
}
#output:
#>34,12,
#>56,58,
#>56,89,

我不认为你想要这种结构,你可能想使用一个数组,(一个匿名数组)。

%ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89]
);

现在您可以轻松地显示如下输出:

foreach(keys %ages) {
  $name = $_;
  foreach( @{$ages{$name}} ) {
    print $_,",";
  }
  print "\n";
}
#output:
#>39,34,11,12,
#>34,56,76,58,
#>27,56,78,89,

对不起,我必须着急,对不起错别字,希望你明白你应该怎么做这样的存储

于 2012-08-09T19:37:08.213 回答
1
%ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89],
);    

@keys = keys %ages;
@val = values %ages;
print "@keys\n";
print "@{$_}\n" for @val;
于 2012-08-07T11:15:46.823 回答