perl - 从两个数组创建哈希

时间:2013-10-23 14:19:03

标签: arrays perl hash

我有以下两种形式的数组:

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很新。

2 个答案:

答案 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秒(在一小段运行中无关紧要,但可能会超过数千或数百万个循环)。