2013-03-26 104 views
0

我想給一個鍵多個值並打印它們。這裏是代碼,但它用新值替換了鍵。在散列時將多個值賦給perl中的一個鍵

#!/usr/bin/perl 
%coins = ( 
    "Quarter" , 25, 
    "Dime" , 10, 
    "Quarter", 5 
); 
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) { 
    print "$value $coins{$value} \n"; 
} 
+3

你想完成什麼?爲什麼'Quarter'映射到5,不應該是'Nickel'? – Barmar 2013-03-26 16:31:55

+0

你期望'$ coins {Quarter}'返回什麼? – cjm 2013-03-26 17:51:25

回答

4

一個密鑰不能有多個值。你可以得到的最接近的值是一個arrayref,並且在該數組中有多個值。

%coins = ( 
    Quarter => [25, 5], 
    Dime => [10], 
); 

雖然,你擁有的數據,它看起來像你應該扭轉結構:

%coins = ( 
    5 => "Quarter", 
    25 => "Quarter", 
    10 => "Dime" 
); 
+0

你能告訴我該怎麼做嗎? – 2013-03-26 16:21:48

+4

@MuhammadSaad在線Perl手冊包含Perl中的[數據結構簡介](http://perldoc.perl.org/perldsc.html)。請用它來回答你的問題。 – 2013-03-26 16:32:52

1

似乎合法的Perl替代的價值。 因爲第一個字段是關鍵字,第二個字段是值。

所以,你有2個解決方案來解決你的問題:

1反轉鍵/值(最差的解決方案)

#!/usr/bin/perl 
    %coins = ( 
     25, "Quarter", 
     10, "Dime", 
     5, "Quarter" 
    ); 
    foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) { 
     print "$value $coins{$value} \n"; 
    } 

有了這個methoid,你不能有2個 「價值觀」 與相同「鑰匙」 ......很明顯

2.哈希/陣列(更好的解決方案)

#!/usr/bin/perl 
    %coins = ( 
     "Quarter" => [25, 5, 15], 
     "Dime" => [10] 
    ); 
    foreach $value (keys %coins) { 
     my @[email protected]{$coins{$value}}; 

     foreach my $index (sort { $a <=> $b } @valueArray) { 
      print "$value $index \n"; 
     } 
    } 

將陣列與哈希表結合使用

1

您可以將值存儲在數組中。 在哈希分配其參考。 因此,無論何時將值推送到數組,它都可以在哈希中訪問。 如果你給了匿名數組,你必須每次手動賦值。 例如:

@array_value=(1); 
%hash=('number' => \@array_value); 
push @array_value,3; 
print "@{$hash{'number'}}"; 

每當你想在哈希添加值,你可以在陣列「@array_value」添加它。 你可以像下面那樣取消引用哈希值中的值數組 @ {$ hash {'number'}}。

相關問題