在perl中访问散列的散列的特定键?

在perl中访问散列的散列的特定键?,perl,hash-of-hashes,Perl,Hash Of Hashes,如何访问HoH的第二个值或第二个键我想访问每个组键及其关联值的member2。我不知道我的键名,我只知道它是第二个键 %HoH = ( Group1=> { member1=> "fred", member2=> "barney", }, Group2 => { member1 => "george", member2 => "jane", }, ); 下面打印每个member2键的值(另请参见): 另一方面

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

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

);

下面打印每个
member2
键的值(另请参见):

另一方面

use warnings;
use strict;

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

);

for (keys %HoH) {
    print "$HoH{$_}{member2}\n";
}
您既不能访问“第二个键”也不能访问“第二个值”,因为哈希元素没有特定的顺序<代码>打印转储程序(\%HoH)可能会给您提供哈希元素的另一个顺序,而不是初始值设定项使用的顺序。如果需要特定的顺序,应该使用数组散列

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

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

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

如上所述,您不知道您实际上想要第二个键,因为您无法确定散列键的存储顺序
keys
保证为一组一致的键返回相同的顺序,但不可能按照您声明的顺序返回

但是,您可以查找有序散列。但是,如果您真的想在两个散列之间关联数据,您可能需要重新考虑结构,而不是依赖顺序

而且,
$member[$i-1]
$hash{'member'.$i}
更好。它不仅速度更快,而且结构更好。如果您发现自己有“索引”键,这很好地表明您想要的是列表而不是散列

从您向我展示的内容来看,这似乎对您的数据结构更有意义:

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

假设我不知道我的密钥名,我只知道它是第二个密钥。如果我不知道我的密钥名,我只知道它是第二个密钥。哈希不维护密钥的顺序。换句话说,键的出现顺序可能与它的构造顺序不同。也许如果你确定它的后缀总是2。
%HoH = (
Group1=> {
    member1=> "fred",
    member2=> "barney",
},
 Group2 => {
    member1   => "george",
    member2   => "jane",
},
);

print map { "$HoH{$_}{'member2'}\n" } keys %HoH;
my %HoH = (
    Group1=> [ "fred", "barney" ],
    Group2 => [ "george", "jane" ]
);
my @groups 
    = ( [ qw<fred   barney> ]
      , [ qw<george jane>   ]
      );