为了账号安全,请及时绑定邮箱和手机立即绑定

perl 如何判断 数组 子集

perl 如何判断 数组 子集

大话西游666 2019-04-12 11:06:41
Perl里一个数组@A[0] 'hvacmall.o' [1] 'idlemopn.o' [2] 'idlemcnd.o' [3] 'idlemrpm.o' [4] 'CAL_HVAC' 另一数组@B[0] 'FF' [1] 'idlemopn' [2] 'hvacmall.o' [3] 'pageff_const' [4] 'SW_NAME' [5] 'SHARED_CONST' [6] 'UNPAGE_CODE' [7] 'CAL_HVAC' [8] 'idlemcnd' 这样如何能判断A是B的子集, 谢谢了
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

my $flag=0;
for(my $i=0;$i<@A;$i++){
for(my $j=0;$j<@B;$j++){
if($B[j] eq $A[i]){
$flag++;
last;
}
}
}
if($flag==@A){
print "\@A is part of \@B";
}
其实就是同时遍历A和B数组,如果A数组中的值在B数组中存在,则计数加1,当全部遍历完成之后,则$flag的数表示A数组中在B数组里面存在的个数。当存在个数和数组A中元素个数相同时,则说明A数组为B数组的子集。其中last是防止A数组中某一个元素在B数组中存在两次时错误多加一次。



查看完整回答
反对 回复 2019-04-13
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

sub is_subset {
(@a, @b) = @_; //Here wrong, array flattened....
my $flag = 1;
my %uniq = ();
my @tmp = map $uniq{$_}++, @b;
for (@a) {
unless (exists $uniq{$_}) { $flag = 0 and last }
}
return $flag;
}




查看完整回答
反对 回复 2019-04-13
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

 只是因为 A,B本身也是在数组里的. [A1,A2,A3...], [B1,B2,B3...]
都用for嵌套的话可能效率上有点低.


sub is_subset {
(@a, @b) = @_;
my $flag = 1;
my %uniq = ();
my @tmp = map $uniq{$_}++, @b;
for (@a) {
unless (exists $uniq{$_}) { $flag = 0 and last }
}
return $flag;
}

查看完整回答
反对 回复 2019-04-13
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信