Perl 将一个哈希键与另一个哈希键进行比较';s值
如何比较一个散列的键和另一个散列的值?这是我散列的输出。我只需要返回布尔输出 (我的代码现在有点乱,所以请原谅我没有在这里发布。我只需要逻辑,我会尝试进一步整合它。)Perl 将一个哈希键与另一个哈希键进行比较';s值,perl,hash,Perl,Hash,如何比较一个散列的键和另一个散列的值?这是我散列的输出。我只需要返回布尔输出 (我的代码现在有点乱,所以请原谅我没有在这里发布。我只需要逻辑,我会尝试进一步整合它。) 谢谢。我把它理解为如何比较非加密值和加密值。不过我可能错了 如果是这样的话 if HASH_VALUE(nonEncrypted) is equal to encryptedValue do something else do something else $VAR1分配两次。我想这是个打字错误。确实要检查哈希是
谢谢。我把它理解为如何比较非加密值和加密值。不过我可能错了 如果是这样的话
if HASH_VALUE(nonEncrypted) is equal to encryptedValue
do something
else
do something else
$VAR1
分配两次。我想这是个打字错误。确实要检查哈希是否包含给定的键,尽管该键与另一个哈希中的值相同(eq
)
您可以使用exists
,例如,if(exists$hash{$key}){…}
。有关定义的与存在的之间的差异,请参阅
顺便说一句,当您用{}
声明匿名散列和用[]
声明匿名数组时,在获取实际内容之前需要取消引用;否则,您只需使用引用(如c语言中的指针)。这里让您感到不舒服的是,哈希值不是实际值,而是数组引用(如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
5555 -> 13570 ->
[04/Jun/2013:15:06:13
5555 -> 8675309 ->
Jenny
I got your number
编辑:替换代码以检查每个%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 -> 13570 ->
[04/Jun/2013:15:06:13
5555 -> 8675309 ->
Jenny
I got your number
defined$VAR1->{$VAR1->{'5555'}}
应该告诉您$VAR1中是否存在与$VAR1的键'5555'的值匹配的键。。。。对于VAR1的不同定义。。。。。8/我试过,| if(defined$hash1{$key2})|,这里key2指的是第二个散列。你能进一步解释一下吗?这与问题无关。这个问题是关于Perl数据类型的“散列”(在其他语言中称为“散列表”、“关联数组”或“字典”),不是加密哈希。问题是关于Perl数据结构。这个答案是关于单向散列函数的。请删除它。不,这不是打字错误,这是使用Data::Dumper显示哈希的结果。Data::Dumper无法访问变量的实际名称,因此它将所有变量都称为$VAR1
。感谢Dave的响应,这正是我要查找的,但是您知道第一个哈希可能包含多个值,因此需要grep来表示存在。@JohnRein请参阅我在中编辑的用于处理数组中多个值的备用版本。哇,这太好了。请忽略散列2中的第二个键,因为这两个散列之间不常见。我们只需要firstkey来比较hash1的值。为什么不为我的$first_key(…){…}
编写它呢?