我有以下两种形式的数组:
root rhino root root root root root root root root root root domainte root
stam rhino jam onetwo domante ftpsi jay testwp contra raul vnod foos raul bruce
请注意它们的长度相等(并且总是如此)。我想创建一个哈希,以便有一个名为root
的单个键,其值是第二个数组中的对应值。基本上,第一个数组的元素需要是键,第二个数组中的元素需要是值,但键必须是唯一的,值可以是数组。
我如何实现这一结果?对不起,Perl很新。
答案 0 :(得分:3)
只需迭代两个数组的索引,将每个值推送到键的相应数组引用。
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my @keys = qw(root rhino root root root root root root root root root root domainte root);
my @values = qw(stam rhino jam onetwo domante ftpsi jay testwp contra raul vnod foos raul bruce);
my %hash;
for my $idx (0 .. $#keys) {
push @{ $hash{ $keys[$idx] } }, $values[$idx];
}
print Dumper \%hash;
答案 1 :(得分:1)
Choroba的解决方案很完美,但我喜欢使用地图来做这样的事情。
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my $i=0;
my %hash;
map {push @{$hash{$_}}, $values[$i++]} @keys;
print Dumper \%hash;
我使用Time :: HiRes检查每个这些的运行时间,并且map方法比循环方法快15/10000秒(在一小段运行中无关紧要,但可能会超过数千或数百万个循环)。