访问perl中散列哈希的特定键?

时间:2012-09-18 12:07:38

标签: perl hash-of-hashes

%HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",  
},

);

如何访问 HoH 的第二个值或第二个键我想访问每个组键的 member2 及其相关值。我不知道我的密钥名称,我只知道它是第二把钥匙

   foreach $key (keys %HoH){
        foreach $value (keys %{$HoH{$key}}){
            print $key."\n";
         }
   }

5 个答案:

答案 0 :(得分:3)

您既不能访问“第二个密钥”也不能访问“第二个值”,因为哈希元素没有特定的顺序。 print Dumper(\%HoH);可能会给你另一个哈希元素顺序,而不是初始化程序使用的顺序。如果需要特定订单,则应使用数组哈希值。

my %HoH = (
    Group1=> [ "fred", "barney" ],
    Group2 => [ "george", "jane" ]
);

之后,您可以将“fred”作为$HoH{Group1}->[0]和“jane”访问为$HoH{Group2}->[1]

答案 1 :(得分:1)

foreach my $key (keys %HoH)  
{  
    foreach my $value (keys %{$HoH{$key}})  
    {  
        if($value eq "member2") 
        {  
            print $HoH{$key}{$value}."\n";  
        }  
    }
} 

答案 2 :(得分:1)

以下打印每个member2键的值(另请参阅perldoc perldsc):

use warnings;
use strict;

my %HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",  
},

);

for (keys %HoH) {
    print "$HoH{$_}{member2}\n";
}

答案 3 :(得分:1)

如上所述,你不知道你真的想要第二个密钥,因为你无法确定存储散列密钥的顺序。keys保证返回一致的密钥集的相同顺序,但不太可能按照您声明的顺序。

但是,您可以查看Tie::IxHash的有序哈希值。但是如果你真的想要将两个哈希值之间的数据联系起来,你可能需要重新考虑结构,而不是依赖于秩序。

此外,$member[$i-1]优于$hash{'member'.$i}。除了更快,它只是更好的结构。如果您发现自己使用“索引”键,则表明您需要列表而不是哈希值。

这似乎比你向我展示的数据结构更有意义:

my @groups 
    = ( [ qw<fred   barney> ]
      , [ qw<george jane>   ]
      );

答案 4 :(得分:0)

换句话说。

%HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",
},
);

print map { "$HoH{$_}{'member2'}\n" } keys %HoH;