通过散列数组迭代
问题描述:
我已经写了下面的例程,遍历散列0 - 7并打印出每个中特定键的值。我需要在每个散列中获取'b4'的值。通过散列数组迭代
我想取消(0..7),当有不同数量的哈希值时更智能。例如,有时仅存在2或有可能是160
my $out = decode_json $client->responseContent();
#print "\nOutput is :\n\n" . Dumper $out;
for my $slice (0..7) {
my $out = $out->{data}[$slice]{b4};
print " $out \n";
}
的数据被构造为这样:
DB<1> x $out
0 HASH(0x125fb5e0)
'data' => ARRAY(0x1260d760)
0 HASH(0x121765d0)
'b1' => '21'
'b2' => '22'
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
1 HASH(0x125fb650)
'b1' => '21'
'b2' => '22'
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
2 HASH(0x1236b960)
'b1' => '21'
'b2' => '22'
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
3 HASH(0x12177030)
'b1' => '21'
'b2' => '22'
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
4 HASH(0x1260da00)
'b1' => '21'
'b2' => '22'
'b3' => '23'
'b4' => '24'
'b5' => '25'
'b6' => '26'
'b7' => '27'
答
在你的$out
是对单元素散列的引用,其具有其数组引用的值data
元素
最好将参考提取到单独的变量中,以便您可以更简单地访问内容。假设你写
my $data = $out->{data};
此后,该阵列是@$data
访问,它包含的元素个数为scalar @$data
,而指数0 .. $#$data
。您可以访问阵列中的每个元素与$data->[0]
,$data->[1]
等
您的代码将成为
my $out = decode_json $client->responseContent;
my $data = $out->{data};
for my $i (0 .. $#$data) {
my $item = $data->[$i];
my $b4 = $item->{b4};
print "$b4\n";
}
不过需要注意的是,除非你需要用于其他目的数组索引,你可能会更好过遍历数组元素本身而不是它的索引。此代码会做同样的事情
my $out = decode_json $client->responseContent;
my $data = $out->{data};
for my $item (@$data) {
my $b4 = $item->{b4};
print "$b4\n";
}
甚至只是
print "$_->{b4}\n" for @$data;
,如果你不需要你的循环中做别的
+0
令人惊叹的是,感谢您的解释! – lollan
[perldsc(HTTP://的perldoc。 perl.org/perldsc.html)(Perl数据结构食谱)可能会有所帮助。它演示了如何创建和遍历各种数据结构,如散列数组。 – ThisSuitIsBlackNot