Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1871847
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类:

2006-07-11 09:56:30

假设@p与@l是两个数组,
 
如果$#p == $#l(元素个数相等),按以下方法可以判断是否存储了同一个集合:
方法(一):
#排序
@p=sort(@p);
@l=sort(@l);
#连接成一个字条串后比对
$jp=join("",@p);
$jl=join("",@l);
方法(二):
use Array::Compare; #此模块提供了数组对比函数
my $comp=Array::Compare->new(sep=>'|'); #指定连接时的分割符
my $result=$comp->perm(\@p,\@l); #perm用以比对@l是否为@p重排序后生成的,如果不是,返回not defined的值
注:方法(二)在模块内部的实现方法与方法(一)基本相同,只是new的时候多了一些选项,使用起来更灵活。另外,这个模块也提供更复杂的对比函数。
 
如果数组元素个数不等,求二者差集可以用以下方法:
my %tmp;
@tmp{@l}=();
delete @tmp{@p};
@result=keys %tmp;
 
 
 
阅读(4051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~