作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个似乎是哈希数组的哈希的哈希。我试图提取一些值,但我被难住了(这比我使用结构要深入得多。它看起来像这样......
%htest = (
8569 => {
4587 => [
{
date=> "2011-01-15",
approved=> 1,
},
{
date=> "2011-01-12",
approved=> 1,
},
],
1254 => [
{
date=> "2011-01-12",
approved=> "",
},
{
date=> "",
approved=> 1,
},
],
},
);
尝试迭代这个东西让我非常头疼。我正在尝试访问第二个哈希值(4587 和 1254)下的元素数。 approved="1"的元素数量和日期包含值的元素数量。
如果我可以遍历它们,我确信我可以将我需要的东西推到一个不那么复杂的结构中,但到目前为止我不知所措。
我已经走到这一步了......
while (my ($id, $surveyhash) = each %{ $htest{'8569'} } ){
print "$enumid = $subhash\n";
print Dumper $subhash."\n";
}
这给了我“4587”和“1254”但是试图在 $subhash 上做一个转储只会给我....
4587 = ARRAY(0x9a9ffb0)
$VAR1 = 'ARRAY(0x9a9ffb0)
';
1254 = ARRAY(0x9a91788)
$VAR1 = 'ARRAY(0x9a91788)
';
知道如何迭代这个怪物吗?珍妮
最佳答案
你的结构有拼写错误,你需要在最里面的散列和末尾的括号之间使用逗号(而不是大括号)
一旦你修复它,你可以使用这样的东西:
my $approved = 0, my $date_has_value = 0;
while ( my ($k,$vref) = each %htest ) {
while ( my ($k,$v) = each %$vref ) {
# Now you're inside the inner hash, so there will be 2 iterations
# with $k 4587 and 1254
foreach my $item (@$v) {
# Now each $item is a reference to the innermost hashes
$approved++ if $item->{approved} == 1;
$date_has_value++ if $item->{date};
}
}
}
关于perl - 遍历复杂的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9005783/
我是一名优秀的程序员,十分优秀!