免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5803 | 回复: 9
打印 上一主题 下一主题

请教如何比较两个hash是否相同? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-11 18:20 |只看该作者 |倒序浏览
我用
if(%hash1 == %hash2)
{
...
}
好像不行啊
谢谢!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-08-13 08:25 |只看该作者

请教如何比较两个hash是否相同?

相同?是指ref到同一個 hash嗎?
還是數值相同?
看起來向後面這個...
你得一個一個抓裡面的數值出來比較..看看一不一樣..
不然上CPAN找找..應該有現成的module可以用..

论坛徽章:
0
3 [报告]
发表于 2004-08-13 17:37 |只看该作者

请教如何比较两个hash是否相同?

#!/usr/bin/perl
sub hashcompare {
        @hasharray=@_;
        my $key1str=join "|",keys(%{$hasharray[0]});
        my $key2str=join "|",keys(%{$hasharray[1]});
        if($key1str eq $key2str)
        {
                $val1str=join "|",values(%{$hasharray[0]});
                $val2str=join "|",values(%{$hasharray[1]});
                if($val1str eq $val2str)
                {
                        return 1;
                }
                else
                {
                        return 0;
                }
        }
}
%hash1=("one"=>;1,"two"=>;2);
%hash2=("one"=>;2,"two"=>;2);
if(hashcompare(\%hash1,\%hash2))
{
        print "两个hash相同\n";
}
else
{
    print "两个hash不相同\n";
}
希望来的不晚。我自己写的一个小函数。请斧正

论坛徽章:
0
4 [报告]
发表于 2004-08-13 17:40 |只看该作者

请教如何比较两个hash是否相同?

在周末完成。愉快

论坛徽章:
0
5 [报告]
发表于 2004-08-14 01:48 |只看该作者

请教如何比较两个hash是否相同?

如果hash的key或value里有"|"就可能出错了。

例如:
%hash1=("one"=>;1,"two"=>;2);
%hash2=("one|two"=>;"1|2";

%hash1=("one"=>;"1|2","two"=>;2);
%hash2=("one"=>;"1","two"=>;"2|2";


改进后的hashcompare:


  1. sub hashcompare {
  2.   @hasharray=@_;
  3.   # compare number of keys first
  4.   if ( keys(%{$hasharray[0]}) == keys(%{$hasharray[1]}) ) {
  5.     # compare each key/value
  6.     foreach $key ( sort keys %{$hasharray[0]} ) {
  7.       if ( ${$hasharray[1]}{$key} eq ${$hasharray[0]}{$key} ) {
  8.         next;
  9.       } else {
  10.         return 0;
  11.       }
  12.     }
  13.   } else {
  14.     return 0;
  15.   }
  16.   return 1;
  17. }

复制代码

论坛徽章:
0
6 [报告]
发表于 2004-08-14 09:15 |只看该作者

请教如何比较两个hash是否相同?

不错。由于时间仓促没考虑到连接符的问题。现修正如下
#!/usr/bin/perl
#使用三个参数。hashcompare hash1,hash2,分割符
sub hashcompare {
list(@hasharray,$sep)=@_;

my $key1str=join $sep,keys(%{$hasharray[0]});
my $key2str=join $sep,keys(%{$hasharray[1]});
if($key1str eq $key2str)
{
$val1str=join $sep,values(%{$hasharray[0]});
$val2str=join $sep,values(%{$hasharray[1]});
if($val1str eq $val2str)
{
return 1;
}
else
{
return 0;
}
}
}
%hash1=("one"=>;1,"two"=>;2);
%hash2=("one"=>;2,"two"=>;2);
if(hashcompare(\%hash1,\%hash2,"|")
{
print "两个hash相同\n";
}
else
{
print "两个hash不相同\n";
}

论坛徽章:
0
7 [报告]
发表于 2004-08-24 14:07 |只看该作者

请教如何比较两个hash是否相同?

将一个hash赋给一array,另一个hash赋另一个array,比较两个array不就行了 ?

论坛徽章:
0
8 [报告]
发表于 2004-08-25 09:00 |只看该作者

请教如何比较两个hash是否相同?

比较array?好主意啊。其实我的方法就是借鉴了两个array比较的函数的实现

论坛徽章:
0
9 [报告]
发表于 2004-08-25 09:18 |只看该作者

请教如何比较两个hash是否相同?

第三修订版
#!/usr/bin/perl
#http://search.cpan.org/CPAN/authors/id/D/DA/DAVECROSS/Array-Compare-1.09.tar.gz
use Array::Compare;

sub hashcompare {
@hasharray=@_;
my @array1=%{$hasharray[0]};
my @array2=%{$hasharray[1]};
foreach my $item (@array1) {
        print $item."\n";
}
my $comp = Array::Compare->;new;
$comp->;Sep('|');
$comp->;compare(\@array1, \@array2);
}
%hash1=("one"=>;1,"two"=>;2);
%hash2=("one"=>;2,"two"=>;2);
if(hashcompare(\%hash1,\%hash2))
{
print "两个hash相同\n";
}
else
{
print "两个hash不相同\n";
}

论坛徽章:
0
10 [报告]
发表于 2004-08-25 09:18 |只看该作者

请教如何比较两个hash是否相同?

#!/usr/bin/perl
#http://search.cpan.org/CPAN/authors/id/D/DA/DAVECROSS/Array-Compare-1.09.tar.gz
use Array::Compare;

sub hashcompare {
@hasharray=@_;
my @array1=%{$hasharray[0]};
my @array2=%{$hasharray[1]};
foreach my $item (@array1) {
        print $item."\n";
}
my $comp = Array::Compare->;new;
$comp->;Sep('|');
$comp->;compare(\@array1, \@array2);
}
%hash1=("one"=>;1,"two"=>;2);
%hash2=("one"=>;2,"two"=>;2);
if(hashcompare(\%hash1,\%hash2))
{
print "两个hash相同\n";
}
else
{
print "两个hash不相同\n";
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP