Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何比较两个散列的内容_Perl_Hash - Fatal编程技术网

Perl 如何比较两个散列的内容

Perl 如何比较两个散列的内容,perl,hash,Perl,Hash,我有两个自动生成的哈希,它们有相同数量的元素,但我不知道有多少 我需要比较第二个散列值和第一个散列值 { TAP1 => [0, 0, 0, 0, 0, 0, 144, 1300, 2963, 3031, 16699, 16711, 36, 6634, 6837, 7233, 1103], TAP2 => [0, 0, 3291, 71, 2994, 6769, 10985], TAP3 => [0, 2795, 16395], } 如何做到这一点? 如果您只需要

我有两个自动生成的哈希,它们有相同数量的元素,但我不知道有多少

我需要比较第二个散列值和第一个散列值

{
  TAP1 => [0, 0, 0, 0, 0, 0, 144, 1300, 2963, 3031, 16699, 16711, 36, 6634, 6837, 7233, 1103],
  TAP2 => [0, 0, 3291, 71, 2994, 6769, 10985],
  TAP3 => [0, 2795, 16395],
}
如何做到这一点?

如果您只需要知道它们是否匹配,那么您可以使用。它导出的
Compare
函数在结构匹配时返回true,在结构不同时返回false,这与Perl
cmp
相反

使用严格;
使用“全部”警告;
使用数据::比较“比较”;
我的%taps1=(
TAP1=>[0,0,0,0,0,0,014,1300,2963,3031,16699,16711,36,6634,6837,7233,1103],
TAP2=>[0,03291,712994676910985],
TAP3=>[0279516395],
);
我的%taps2=(
TAP1=>[0,0,0,0,0,0,014,130,296,3031,16699,1711,3664,6837,723,113],
TAP2=>[0,0,3291,75,295,6778,10985],
TAP3=>[027316394],
);
printf“哈希是%s\n”,
比较(\%taps1,\%taps2)?'相同':'不同';
对于我的$key(排序键%taps1){
printf“这些%s元素是%s\n”,
$key,
比较($taps1{$key},$taps2{$key})“‘相同’:‘不同’;
}
输出
散列是不同的
TAP1元素是不同的
TAP2元素是不同的
TAP3元素是不同的

非常感谢@Borodin。我可以把这个扩展到多个散列,比如Compare(\%taps1,\%taps2,\%taps3)@nandeeshv:你必须一次比较两个。用标量来考虑它
'a'eq'a'
可以,但什么是
'a'eq'a'eq'b'
eq('a','a','b')
?@ikegami我需要比较每个版本的键的值,然后创建一个新的哈希。如果第二个版本中有任何更改,请将新值存储在新哈希中。如果第一个版本的值与第二个版本的值相同,请存储相同的值。有点困惑吗?@nandeeshv:听起来你只是想要第二个散列的副本?还是你在谈论数组中的每个元素?@Borodin。这只是一个例子。有时,第二个散列值可能会更改,也可能不会更改。所以,我需要存储更改的一个。但是,如果没有更改,我将保留以前的值。如果有更改,您希望使用新值。如果没有更改,则希望保留以前的值,这与使用新值相同。因此,无论发生什么情况,您都希望使用新值。根据你说的,你只需要使用第二个散列就可以了。@ikegami。哦,对不起,我天真的想法。是的,你是对的,我意识到我可以放弃第一个。谢谢你的提醒。
{
  TAP1 => [0, 0, 0, 0, 0, 0, 144, 130, 296, 3031, 16699, 1711, 3, 664, 6837, 723, 113],
  TAP2 => [0, 0, 3291, 75, 295, 6778, 10985],
  TAP3 => [0, 273, 16394],
}