在perl中使用Grep比较两个数组



我有两个哈希数组。它们如下

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>

最新更新