2014-11-04 115 views
0

下面是Perl哈希:打印哈希的哈希值的兩個不同的密鑰在Perl

my %hash = (
      'episode1' => { 
          'when' => '08.13.97', 
          'airdate' => '08.13.97', 
          'episodenumber' => '101', 
          'id' => '103511', 
          'title' => 'Cartman Gets an Anal Probe', 
          'available' => 'true' 
          }, 
      'episode2' => { 
          'when' => '08.20.97', 
          'airdate' => '08.20.97', 
          'episodenumber' => '102', 
          'id' => '1035156', 
          'title' => 'Weight Gain 4000', 
          'available' => 'true' 
          } 
); 

我想打印兩集的「ID」,但下面的代碼是不工作:

foreach my $key1 (keys %hash) { 
    foreach my $key2 (keys %{$hash{$key1}}) { 
    print "$hash{$key1}{$key2}{id}\n"; 
    } 
} 

請幫忙。

回答

-1

試試這個:

foreach my $key1 (keys %hash) { 
    print "$hash{$key1}{id}\n"; 
} 

foreach my $key1 (keys %hash) { 
    foreach my $key2 (keys %{$hash{$key1}}) { 
    print "$hash{$key1}{$key2}\n" if($key2 eq 'id'); 
    } 
} 
+2

您想評論投票嗎? – Andrey 2014-11-04 14:22:08

+4

這不是我的投票,但我猜測這是因爲你提供了代碼來解決問題,但沒有解釋什麼是錯誤的原始代碼或爲什麼新的代碼工作。 – cjm 2014-11-04 15:45:10

+0

感謝您的評論。這是第一個完美罰款的代碼被投下來的時候。顯然,每個地方都有自己的白癡。 – Andrey 2014-11-04 15:52:26

1

嘗試使用map

my @ids = map { $hash{$_}{"id"} } sort keys %hash; 

或者,如果你仍然需要的結果作爲哈希:

my %ids_by_key = map { ($_, $hash{$_}{"id"}) } keys %hash; 
+0

值得注意的是,這個答案是去,如果你的方式試圖存儲這些ID以供以後的迭代/使用。如果你不需要在數據結構中存儲這些數據,只需要迭代打印,其他兩個答案就更簡單了。 – 2014-11-04 16:29:20

4

問題是您正在嘗試打印不存在的內容:沒有匹配$hash{$key1}{$key2}{id}的值。

試試這個代碼,它打印出具有關鍵的「ID」的哈希散列值:

use strict; 
use warnings; 

for my $episode (keys %hash){ 
    print "$hash{$episode}{id}\n"; 
} 

103511 
1035156