我有两个哈希数组。它们如下
my $arr1 =[{'mid_id' => '1'},{'mid_id' => '2'},{'mid_id' => '5'} ];
my $arr2 = [{'name' => 'Name1','id' => '1'},{'name' => 'Name2','id' => '2'},{'name' => 'Name6','id' => '6'}];
现在我想从第二个数组中获得其id与第一个数组匹配的名称。我已经尝试过这种方式,但我想使这段代码更好,有没有办法做到这一点
foreach my $a1(@$arr1){
foreach (@$arr2){
if($_->{id} eq $a1->{mid_id}){
print "$_->{id} mapped to $_->{name} n";
} else{
print "no match $_->{id} n";
}
}
您可以这样使用grep
。唯一的技巧是您需要测试是否找到了匹配项:
use strict;
use warnings;
my @array = (
{ 'mid_id' => '1' },
{ 'mid_id' => '2' },
{ 'mid_id' => '5' },
};
my @recs = (
{ 'name' => 'Name2', 'id' => '1' },
{ 'name' => 'Name', 'id' => '2' },
{ 'name' => 'VP', 'id' => '3' },
);
for my $hash (@array){
my ($rec) = grep {$hash->{mid_id} eq $_->{id}} @recs;
print "$hash->{mid_id} mapped to " . ($rec ? $rec->{name} : "<No Match>") . "n";
}
输出:
1 mapped to Name2
2 mapped to Name
5 mapped to <No Match>