Chr*_*phe 4 perl perl-data-structures
我需要将一个平面的密钥列表转换为嵌套的哈希,如下所示:
我的$ hash = {};
我的@array = qw(key1 key2 lastKey Value);
ToNestedHash($ hash,@ array);
会这样做:
$ hash {'key1'} {'key2'} {'lastKey'} ="价值";
Axe*_*man 11
sub to_nested_hash {
my $ref = \shift;
my $h = $$ref;
my $value = pop;
$ref = \$$ref->{ $_ } foreach @_;
$$ref = $value;
return $h;
}
Run Code Online (Sandbox Code Playgroud)
说明:
我们知道:
my $h = {}; my $a = [];
).这样做可能更明确:
foreach my $key ( @_ ) {
my $lvl = $$ref = {};
$ref = \$lvl->{ $key };
}
Run Code Online (Sandbox Code Playgroud)
但是由于反复使用这些参考习语,我完全按原样编写了该行并在发布之前对其进行了测试,没有错误.
至于替代品,以下版本"更容易"(想一想)
sub to_nested_hash {
$_[0] //= {};
my $h = shift;
my $value = pop;
eval '$h'.(join '', map "->{\$_[$i]}", 0..$#_).' = $value';
return $h;
}
Run Code Online (Sandbox Code Playgroud)
但大约慢6-7倍.
归档时间: |
|
查看次数: |
1943 次 |
最近记录: |