perl如何使用exists来检查哈希是否在哈希数组中

时间:2012-08-28 18:47:24

标签: perl hash exists

我有两个哈希数组:AH1和AH2。

$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的哈希值?或者不必迭代数组。

1 个答案:

答案 0 :(得分:1)

exists按索引定位,为0,1,2,而不是123,1389,779。 exists无法帮助。

此外,除非将其中一个数组切换为散列,否则必须遍历两个数组(以这种或那种方式)。

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

它也很有效:你只迭代每个数组一次。