2014-08-31 196 views
-8

請建議如何比較兩個哈希值之間的鍵值對。 基本上我想檢查hash2中是否存在hash1 keyvalue對。Perl:比較2個哈希表值

感謝

+0

這會彈出所有的時間SO - 您是否搜索了關於該主題的現有問題? – 2014-08-31 16:50:38

+0

你的意思是相同的鍵*和*相同的值?只是檢查是否有*任何*?或者得到一個相同的列表? – ysth 2014-08-31 17:06:11

回答

0

@pataka:我不是印刷兩次,但做兩個字母數字字符串比較。所以我已經打印一個蜇傷和另一個數字。我們甚至可以這樣做,如下所示:

#Same Key and Value 
foreach my $val1 (keys %hash1) 
{ 
     foreach my $val2 (keys %hash2) { 

      if($val1 eq $val2)  { 
        if($hash1{$val1} eq $hash2{$val2}) { 
        print "Key:$val1\t" ; 
        print "Value:$hash1{$val1}\n"; 

         } 
        } 
       } 
     } 
+0

非常感謝Praveen .... – pataka 2014-09-01 06:54:42

0

@pataka:尋找到下面的代碼,如果它是有幫助的:

#!/usr/bin/perl 
use strict; 
use warnings; 

my %hash1 = ('Jan' => 1 , 'Feb' => "abc" , 'Mar' => 3); 
my %hash2 = ('Jan' => 85 , 'Feb' => 44 , 'Mar' => 3 , 'Apr' => 23); 


#Same key 
foreach my $val1 (keys %hash1) 
{ 
     foreach my $val2 (keys %hash2) { 
      if($val1 eq $val2)  { 
       print $val1 . "\n"; 
        } 
       } 
     }   

#Same Value 
foreach my $val1 (values %hash1) 
{ 
     foreach my $val2 (values %hash2) { 
      if($val1 eq $val2)  { 
       print $val1 . "\n"; 
        } 
       } 
     } 

#Same Key and Value 
foreach my $val1 (keys %hash1) 
{ 
     foreach my $val2 (keys %hash2) { 
      if($val1 eq $val2 && $val1 =~ m/\d+/)   { 
        if($hash1{$val1} == $hash2{$val2}) { 
        print $val1; 
         } 
        } 
      if($val1 eq $val2 && $val1 =~ m/[A-za-z ]+/)   { 
        if($hash1{$val1} eq $hash2{$val2}) { 
        print $val1; 
         } 
        } 
       } 
     } 
+0

感謝Praveen的迴應...我很困惑我應該從上面的選擇中選擇哪一個。在我的情況下,我想在另一個哈希表中找到確切的鍵值對macthes,然後打印鍵和值都...我認爲我應該去#Same鍵和值...但爲什麼你打印val1兩次,並打印鍵我應該使用$ hash1 {$ val1} ...請指教 – pataka 2014-09-01 04:29:14