2014-11-04 131 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