%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";
}
}
答案 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;