我在可视化循环方面遇到麻烦,并且我认为是数组的哈希数组。如果我误解了,请纠正我。我希望能够遍历以下数组并打印每个键的值。
最终结果将像这样打印元素:
wx.Control.__init__
不幸的是,当我到达关键点三时,我崩溃了。
name
version
pop
tart
这是我到目前为止所管理的。我只是不知道在这些循环中处理键三。
my @complex = (
[
{
one => 'name',
two => 'version',
three => [qw( pop tart )],
},
],
);
任何帮助将不胜感激。
答案 0 :(得分:4)
似乎让您望而却步的是,您的哈希值包含一些值为字符串的值和某些值为数组引用的值。您可以使用ref找出哪些内容,然后进行相应打印
for my $aref (@complex) {
for my $href (@$aref) {
for my $key (keys %{$href}) {
my $refval = ref $href->{$key};
if (not $refval) { # not a reference at all
print "$href->{$key}\n";
} elsif ($refval eq 'ARRAY') {
print "$_\n" for @{ $href->{$key} };
#print "@{ $href->{$key} }\n"; # or all in one line
} else {
warn "Unexpected data structure: $refval";
}
}
}
}
对于更深的结构或您不知道的结构,请基于此编写递归过程。然后还有一些模块可以做到这一点。
请注意,仔细考虑要使用的数据结构会产生可观的回报;它是设计的关键部分之一。另一方面,一旦这些复杂的数据结构变得笨拙,或者如果您提前估计在项目生命周期中可能发生的情况,答案就是切换到一个类。