Perl:比较2个哈希表值

时间:2014-08-31 16:47:46

标签: perl

请建议如何比较两个哈希值之间的键值对。 基本上我想检查hash2中是否存在hash1 keyvalue对。

由于

2 个答案:

答案 0 :(得分: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; 
                      }   
                  }  
                }
        }

答案 1 :(得分: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";

                      }   
                  }  
                }
        }