Arrays perl-从两个数组创建哈希

Arrays perl-从两个数组创建哈希,arrays,perl,hash,Arrays,Perl,Hash,我有以下形式的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的单键,其值是第二个数组中的对应值。基本上,第一个数组的元素需要是键,第二个数组

我有以下形式的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还不太熟悉。

只需迭代两个数组的索引,将每个值推送到键处对应的数组引用

#!/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;

只需迭代两个数组的索引,将每个值推送到键处对应的数组引用

#!/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;

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方法比loop方法快15/10000秒(在一个小的运行中无关紧要,但可能累积了数千或数百万个周期)。

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方法比loop方法快15/10000秒(在小规模运行中无关紧要,但可能会累积数千或数百万个周期)。

值应始终为标量或数组,否则,您每次使用它们时都需要检查代码,例如
if(ref$foo{$bar}eq'ARRAY')
如何让它像以前的大学一样尝试,然后在遇到问题时发布代码?值应该始终是标量或始终是数组,否则每次使用
if(ref$foo)这样的代码时都需要检查它们{$bar}eq'数组')
for循环中的
keys
被注释掉了吗?@i.h4d35:这是数组中的最后一个索引。我尝试使用
my@q1=keys%hash;
my@q2=valu从散列中分别获取键和值es%hash;
。@q1的打印是可以的,但是prining q2提供了
数组(0x24f5078)数组(0x24f51b0)数组(0x24f5030)
。我如何从哈希中获取值?@I.h4d35:只需取消引用它们:
打印“@q1\n”;打印(@$\u335)”对于@q2;
是否在
for
循环中注释掉了
#keys
或者这是语法?@i.h4d35:它是数组中的最后一个索引。我尝试使用
my@q1=keys%hash;
my@q2=values%hash;
从散列中分别获取键和值。@q1的打印是正常的,但撬动q2会得到
数组(0x24f5078)数组(0x24f51b0)数组(0x24F5300)
。我如何从散列中获取值?@I.h4d35:只需取消引用它们:
为@q2;打印“@q1\n”;打印”(@$)”
为什么不做实数?为什么不做实数?