【问题标题】:Compare Two Arrays using Grep in perl在 perl 中使用 Grep 比较两个数组
【发布时间】:2014-06-11 14:07:06
【问题描述】:

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

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";
        }
}

【问题讨论】:

    标签: arrays perl


    【解决方案1】:

    你可以像下面这样使用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>
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2017-02-11
      • 1970-01-01
      相关资源
      最近更新 更多