%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";
}
}
您既无法访问"第二个键",也不能访问"第二个值",因为哈希元素没有特定的顺序。 print Dumper(%HoH);
可能会为您提供比初始值设定项使用的顺序不同的哈希元素顺序。如果你想要一个特定的顺序,你应该使用数组的哈希。
my %HoH = (
Group1=> [ "fred", "barney" ],
Group2 => [ "george", "jane" ]
);
之后,您可以访问"弗雷德"作为$HoH{Group1}->[0]
和"简"作为$HoH{Group2}->[1]
。
foreach my $key (keys %HoH)
{
foreach my $value (keys %{$HoH{$key}})
{
if($value eq "member2")
{
print $HoH{$key}{$value}."n";
}
}
}
下面打印每个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";
}
如上所述,您不知道您实际上想要第二个密钥,因为您无法确定哈希密钥的存储顺序。 keys
保证为一组一致的键返回相同的顺序,但不太可能按照您声明的顺序返回。
但是,您可以查看有序哈希的Tie::IxHash
。但是,如果您真的想在两个哈希之间关联数据,则可能需要重新考虑结构,而不是依赖顺序。
此外,$member[$i-1]
比$hash{'member'.$i}
好。除了速度更快之外,它还具有更好的结构。如果您发现自己使用"索引"键,则表明您想要列表而不是哈希。
从您向我展示的内容来看,这似乎对您的数据结构更有意义:
my @groups
= ( [ qw<fred barney> ]
, [ qw<george jane> ]
);
换句话说。
%HoH = (
Group1=> {
member1=> "fred",
member2=> "barney",
},
Group2 => {
member1 => "george",
member2 => "jane",
},
);
print map { "$HoH{$_}{'member2'}n" } keys %HoH;