繁体   English   中英

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

[英]fetching all values from Hashes with Multiple Values Per Key in 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. 您使用的是hashrefs,而不是arrayrefs
  2. 您没有为@val分配任何@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 "@keys\n";
print "@{$_}\n" for @val;

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

但,

  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,

对不起,我不得不着急,对错别字表示抱歉,希望您了解对这种存储的处理方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM