2012-08-28 123 views
0

我有兩個散列數組:AH1和AH2。perl如何使用exists檢查散列是否在散列數組中

$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 存在功能是AH1的哈希值在AH2?或者不必在數組中迭代。

回答

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

它也很有效率:您只遍歷每個數組一次。

+0

添加到我的答案。 – ikegami

+0

哈希值更復雜,僅使用id不足以驗證存在。我必須使用哈希的4個鍵(標題,started_at,作者,名稱)。 – mamesaye

+0

如果你不能創建一個鍵(例如'join(':',@ {$ _} {qw(headline started_at author name)});'),你必須使用一些昂貴的東西,如for(@ $ AH1){for(@ $ AH2){}}'。 – ikegami

相關問題