Arrays 使用数组元素创建多维哈希
我需要使用数组元素作为键创建具有不同深度的多维哈希。伪代码尝试: 示例行: 实例分层/path/with/block/和/module的语句覆盖率Arrays 使用数组元素创建多维哈希,arrays,perl,hash,Arrays,Perl,Hash,我需要使用数组元素作为键创建具有不同深度的多维哈希。伪代码尝试: 示例行: 实例分层/path/with/block/和/module的语句覆盖率 if (/Statement Coverage for instance (.&?) /) { @array = split /\//, $1; } for (my $eye = 1; $eye <= $#array; $eye++) { A miracle happens to %hash! } if(/语句覆盖率,例如(.&?/
if (/Statement Coverage for instance (.&?) /)
{
@array = split /\//, $1;
}
for (my $eye = 1; $eye <= $#array; $eye++)
{
A miracle happens to %hash!
}
if(/语句覆盖率,例如(.&?/)
{
@数组=拆分/\/,$1;
}
对于(my$eye=1;$eye这就是为您所做的:
my @array = split /\//, $1;
DiveVal(\ my %hash, @array[ 0 .. $#array - 1 ]) = $array[-1];
print Dumper(\%hash);
这就是你所需要的:
my @array = split /\//, $1;
DiveVal(\ my %hash, @array[ 0 .. $#array - 1 ]) = $array[-1];
print Dumper(\%hash);
请参阅下面的代码。它以递归方式构建所需的哈希
但我认为你们采取了一种错误的方法。我显然不知道你们到底想要实现什么,但在我看来,你们应该使用树型数据结构而不是多维散列
use strict;
use warnings;
use v5.10;
use Data::Dumper;
my @data = (
'some/path/test',
'some/path/deeper/test',
'another/deeper/path/test',
);
my $resultHr = {};
foreach my $path (@data) {
my @elems = split /\//, $path;
buildHash($resultHr, @elems);
}
say Dumper($resultHr);
sub buildValue {
my $n = shift;
if (@_) {
return {$n => buildValue(@_)};
}
else {
return $n;
}
}
sub buildHash {
my $hr = shift;
my $k = shift;
return unless $k;
if (exists $hr->{$k} && ref $hr->{$k}) {
buildHash($hr->{$k}, @_);
}
else {
$hr->{$k} = buildValue(@_);
}
}
请参阅下面的代码。它以递归方式构建所需的哈希
但我认为你们采取了一种错误的方法。我显然不知道你们到底想要实现什么,但在我看来,你们应该使用树型数据结构而不是多维散列
use strict;
use warnings;
use v5.10;
use Data::Dumper;
my @data = (
'some/path/test',
'some/path/deeper/test',
'another/deeper/path/test',
);
my $resultHr = {};
foreach my $path (@data) {
my @elems = split /\//, $path;
buildHash($resultHr, @elems);
}
say Dumper($resultHr);
sub buildValue {
my $n = shift;
if (@_) {
return {$n => buildValue(@_)};
}
else {
return $n;
}
}
sub buildHash {
my $hr = shift;
my $k = shift;
return unless $k;
if (exists $hr->{$k} && ref $hr->{$k}) {
buildHash($hr->{$k}, @_);
}
else {
$hr->{$k} = buildValue(@_);
}
}
完全不清楚你在问什么。请了解如何创建。另外,$eye
?完全不清楚你在问什么。请了解如何创建。另外,$eye
?谢谢,不幸的是,我的系统上没有安装该软件包,至少我们的Perl版本是5.8.8,我们的It部门非常不情愿nt升级。也许我可以在家里的笔记本电脑上试用。5.8.8是PerlTanks的一个非常旧的版本,不幸的是,我的系统上没有安装该软件包,至少我们的Perl版本是5.8.8,我们的it部门非常不愿意升级。也许我可以在家里的笔记本电脑上试用。5.8.8是一个非常旧的Perl版本