2014-08-31 119 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