从 perl 中每个键有多个值的哈希中获取所有值



如何获取所有值并打印出来,在代码中每个键跟随多个值

%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

你有三个问题。

  1. 您使用的是哈希引用,而不是数组引用
  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}};
}
%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 "@keysn";
print "@{$_}n" for @val;

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)

如果要提取键"迈克尔·凯恩"的键"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,

对不起,

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

最新更新