假设@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;
阅读(4020) | 评论(0) | 转发(0) |