【发布时间】:2015-01-18 06:47:45
【问题描述】:
我有一个列表,其中包含一些连接的值。我需要使用列表中的键和值创建一个哈希图并合并在一起。但我真的不知道该怎么做。
输入:
my @in =(
'mgenv/1_2_3/parent.dx_environment',
'mgenv/1_2_3/doc/types.dat');
预期输出:
"{ $env => { $ver => [ $file1, $file2, ... ] } }"
我试过这些:
(1)
my @sack_files = (
'mgenv/1_2_3/parent.dx_environment',
'mgenv/1_2_3/doc/types.dat');
my $sack_tree = {};
my %hash=();
for( my $i=0; $i<scalar @sack_files; $i++){
my @array = split(/[\/]+/,$sack_files[$i]);
for(my $i=0;$i<(scalar @array)-1;$i++){
my $first = $array[$i];
my $second = $array[$i+1];
$hash{$first}=$second;
}
# merge
}
(2)
use Data::Dumper;
my @sack_files = (
'mgenv/1_2_3/parent.dx_environment',
'mgenv/1_2_3/doc/types.dat',
);
my $sack_tree = {};
my %hash=();
for( my $i=0; $i<scalar @sack_files; $i++){
my @array = split(/[\/]+/,$sack_files[$i]);
nest(\%hash,@array);
}
在第二种情况下,我得到一个错误,因为当循环变量 i=1 时,键/值已经存在,所以也许我必须检查以前添加的键/值。但我真的不知道怎么做。 我真的很感激任何想法。
【问题讨论】:
-
所以您的预期结果是一个哈希图,其中键 = 第一个路径组件,值 = 其他哈希图,而键 = 第二个路径组件,值 = 文件列表?在第二个示例中,文件为
doc/types.dat?
标签: arrays perl list data-structures hashmap