2012-08-07 104 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