作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个列表,其中包含一些连接的值。我需要使用列表中的键和值创建一个 HashMap 并将其合并在一起。但我真的不知道该怎么做。
输入:
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 时,键/值已经存在,所以也许我必须检查之前添加的键/值。但我真的不知道该怎么做。我真的很感激任何想法。
最佳答案
只需使用 push将新成员添加到散列的散列中的现有数组中。您必须使用 @{ ... }
取消引用数组引用。
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my @sack_files = qw( mgenv/1_2_3/parent.dx_environment
mgenv/1_2_3/doc/types.dat
mgenv/1_2_3/doc/etc.dat
mgenv/4_5_6/parent.dx_environment
mgenv/4_5_6/doc/types.dat
u5env/1_2_3/parent.dx_environment
u5env/1_2_3/doc/types.dat
u5env/4_5_6/parent.dx_environment
u5env/4_5_6/doc/types.dat
);
my %hash;
for my $sack_file (@sack_files) {
my ($env, $ver, $file) = split m{/}, $sack_file, 3;
push @{ $hash{$env}{$ver} }, $file;
}
print Dumper \%hash;
输出
$VAR1 = {
'mgenv' => {
'1_2_3' => [
'parent.dx_environment',
'doc/types.dat',
'doc/etc.dat'
],
'4_5_6' => [
'parent.dx_environment',
'doc/types.dat'
]
},
'u5env' => {
'4_5_6' => [
'parent.dx_environment',
'doc/types.dat'
],
'1_2_3' => [
'parent.dx_environment',
'doc/types.dat'
]
}
};
关于arrays - Perl 列表中的多散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039070/
我是一名优秀的程序员,十分优秀!