2012-08-07 130 views
1

如何获取所有的值并打印,代码如下每个键获取所有值从多值每个键哈希在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 

回答

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}}; 
} 
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; 
1

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

但是,

  1. 记住,这是匿名散列即键 - 值对: {39,34,11,12} =( “39”=> 34,“11 “=> 12)

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

您已经使用1,这意味着使用的是肛门疗法哈希作为%年龄散列值,即

%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, 

我不认为你想这样的一个stucture,你PROBA bly想要使用一个数组, (一个匿名数组)。

%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, 

对不起,我得赶紧走,对不起错别字,希望你明白,你应该为这样的存储做什么

+0

** BHAI请将其标记为答案,如果它是正确的或更新它** – GLES 2012-08-09 19:37:53