可以说我有以下Perl哈希:
%hash = (
'A' => {
'B' => ['C', 'D', 'E'],
'F' => { 'G' => [], 'H' => [] },
'I' => []
} );
Run Code Online (Sandbox Code Playgroud)
我想摆脱[]下面的哈希结果:
%hash = (
'A' => [
'B' => ['C', 'D', 'E'],
'F' => [ 'G', 'H', 'I' ]
]
)
Run Code Online (Sandbox Code Playgroud)
(我希望我得到了我{}和[]平衡的,我道歉,如果没有,但)基本上我想要让这个没有空的阵列/ REF的存在.我确信这是可行的/简单的,但我不确定是否delete()可行,或者是否有更好的方法或Perl模块.有人能引导我朝着正确的方向前进吗?
看起来您的数据可能是任意嵌套的,并且您希望以递归方式遍历它,将某些模式重写为其他模式.为此,我会使用Data::Visitor.
use Data::Visitor::Callback;
use List::MoreUtils 'all';
my $visitor = Data::Visitor::Callback->new(
hash => sub {
my ($self, $href) = @_;
# fold hashrefs with only empty arrayrefs as values into arrayrefs
if (all { ref $_ eq 'ARRAY' && !@{ $_ } } values %{ $href }) {
return [ keys %{ $href } ];
}
# strip k/v pairs with an empty arrayref as a value
return {
map {
$_ => $href->{$_}
} grep {
ref $href->{$_} ne 'ARRAY' || @{ $href->{$_} }
} keys %{ $href }
};
},
);
my %new_hash = %{ $visitor->visit(\%hash) };
Run Code Online (Sandbox Code Playgroud)
这只是说明了我使用的基本方法,并恰好适用于您提供的示例输入.它可能需要进行各种调整,具体取决于您在其他注释中指出的角落中要执行的操作.
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |