如何使用Perl中的map函数获取哈希中的数组值

Jas*_*ssi 0 perl map

我有一个与#结合的元素数组,我希望将其放入哈希中,该数组的第一个元素作为键,并且在将数组元素拆分为#之后将其作为值,但它不会发生.

例如:

my @arr = qw(9093#AT#BP 8111#BR 7456#VD#AP 7786#WS#ER 9431#BP ) #thousand of data 
Run Code Online (Sandbox Code Playgroud)

我想要的是

$hash{9093} = [AT,AP];
$hash{8111} = [BR]; and so on
Run Code Online (Sandbox Code Playgroud)

我们如何使用map函数完成它.否则我需要使用for循环,但我希望使用map函数.

ike*_*ami 6

my %hash = map { my ($k, @v) = split /#/; $k => \@v } @arr;
Run Code Online (Sandbox Code Playgroud)

为了比较,相应的foreach循环如下:

my %hash;
for (@arr) {
   my ($k, @v) = split /#/;
   $hash{$k} = \@v;
}
Run Code Online (Sandbox Code Playgroud)


tob*_*ink 5

使用split拆就"#",以第一块为重点,并保持休息的数组.然后使用键和对数组的引用创建哈希.

use Data::Dumper;

my @arr  = qw( 9093#AT#BP 8111#BR 7456#VD#AP 7786#WS#ER 9431#BP );
my %hash = map {
   my ($key, @vals) = split '#', $_;
   $key => \@vals;
} @arr;

print Dumper \%hash;
Run Code Online (Sandbox Code Playgroud)