假设嵌套的哈希结构%old_hash ..
my %old_hash;
$old_hash{"foo"}{"bar"}{"zonk"} = "hello";
..我们想要“平坦化”(对不起,如果这是错误的术语!)到非嵌套哈希使用sub& flatten(…)这样..
my %h = &flatten(\%old_hash);
die unless($h{"zonk"} eq "hello");
& flatten(…)的以下定义可以解决问题:
sub flatten {
my $hashref = shift;
my %hash;
my %i = %{$hashref};
foreach my $ii (keys(%i)) {
my %j = %{$i{$ii}};
foreach my $jj (keys(%j)) {
my %k = %{$j{$jj}};
foreach my $kk (keys(%k)) {
my $value = $k{$kk};
$hash{$kk} = $value;
}
}
}
return %hash;
}
虽然给出的代码有效,但它不是非常易读或干净.
我的问题是双重的:
>给定代码在哪些方面与现代Perl最佳实践不对应?要严厉!
总结
以上是DEVMAX为你收集整理的如何将嵌套的Perl哈希干净地转换为非嵌套的?全部内容。
如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站 推荐给好友。