0

我有以下形式的 2 个数组:

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 很陌生。

4

2 回答 2

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;
于 2013-10-23T14:25:18.487 回答
2

Choroba 的解决方案是完美的,但我喜欢用 map 来做这样的事情。

#!/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 秒(在小运行中微不足道,但可能加起来超过数千或数百万个周期)。

于 2013-10-23T15:09:53.653 回答