0

AH1とAH2の2つのハッシュ配列があります。

$AH1 = [  
          {
            'id' => 123,  
            'name' => abc
          },  
          {
            'id' => 456,  
            'name' => def
          },  
          {
            'id' => 789,  
            'name' => ghi
          },  
          {
            'id' => 101112,  
            'name' => jkl
          },  
          {
            'id' => 1389,  
            'name' => mno
          }  
        ];  

$AH2 = [  
          {
            'id' => 123,  
            'name' => abc
          },  
          {
            'id' => 1389,  
            'name' => mno
          },  
          {
            'id' => 779,  
            'name' => ghi
          }  
        ];  

Perlの存在関数を使用してAH2にあるAH1のハッシュを印刷するにはどうすればよいですか?または、配列を反復処理する必要はありません。

4

1 に答える 1

1

existsインデックスで検索します。インデックスは0,1,2であり、123,1389,779ではありません。exists助けることはできません。

さらに、配列の1つをハッシュに切り替えない限り、両方の配列を(いずれかの方法で)繰り返す必要があります。

$HH2 = {
   123 =>  {
             'id' => 123,  
             'name' => abc
           },  
   1389 => {
            'id' => 1389,  
            'name' => mno
           },  
   779  => {
             'id' => 779,  
             'name' => ghi
           }
};

実際、これを解決するには、切り替えが最も簡単な方法です。

my %HH2 = map { $_->{id} => $_ } @$AH2;
for (@$AH1) {
    print "$_->{id} in both\n"
       if $HH2{ $_->{id} };
}

また、非常に効率的です。各配列を1回だけ反復します。

于 2012-08-28T18:56:43.483 に答える