将一个散列键与其他散列值进行比较

时间:2013-06-11 20:54:43

标签: perl hash

如何将一个哈希的密钥与其他哈希的值进行比较?这是我的哈希的输出。我只需要返回布尔输出。

(我的代码现在很乱,所以请原谅我没有在这里发帖。我只需要逻辑,我会尝试进一步合并它。)

    $VAR1 = {
      '5555' => [
                    '13570'
                  ]
    };
    $VAR1 = {
      '13570' => [
                   '[04/Jun/2013:15:06:13'
                 ]
            };

感谢。

3 个答案:

答案 0 :(得分:1)

$VAR1被分配两次。我想这是一个错字。你真的想检查一个哈希是否包含一个给定的密钥,虽然这个密钥是相同的(eq),并且在另一个哈希中有一个值?

您可以使用exists,例如if (exists $hash{$key}) {...}。有关definedexists之间的差异,请参阅What's the difference between exists and defined?

BTW,当您使用{ }声明匿名哈希和使用[ ]声明匿名数组时,需要在获取实际内容之前取消引用;否则你只需使用引用(如c语言中的指针)。

答案 1 :(得分:0)

在这里抛弃你的是你的哈希值不是实际的,而是数组引用(如Data :: Dumper输出中的[ ... ]所示)到包含实际数据的单元素数组。因此,您需要取消引用它们并从结果数组中获取第一个元素:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my %hash1 = ('5555' => [ '13570' ]);
my %hash2 = ('13570' => [ '[04/Jun/2013:15:06:13' ]);

for (keys %hash1) {
  my $first_key = $_;
  my $second_key = $hash1{$first_key}[0];
  say "$first_key -> $second_key -> $hash2{$second_key}[0]";
}

输出:

5555 -> 13570 -> [04/Jun/2013:15:06:13

修改备用代码,用于检查每个%hash1条目中的所有值,并在%hash2中显示每个值的所有相应值:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my %hash1 = ('5555' => [ '13570', '8675309' ]);
my %hash2 = (
  '13570' => [ '[04/Jun/2013:15:06:13' ],
  8675309 => [ 'Jenny', 'I got your number' ],
);


for (keys %hash1) {
  my $first_key = $_;
  for my $second_key ( @{$hash1{$first_key}} ) {
    if (exists $hash2{$second_key}) {
      say "$first_key -> $second_key ->";
      say "\t$_" for @{$hash2{$second_key}};
    }
  } 
}

输出:

5555 -> 13570 ->
    [04/Jun/2013:15:06:13
5555 -> 8675309 ->
    Jenny
    I got your number

答案 2 :(得分:-3)

我这样做是为了将非加密值与加密值进行比较。我可能错了。

如果是这种情况......

if HASH_VALUE(nonEncrypted) is equal to encryptedValue
    do something
else
    do something else