猿问

perl 如何判断 数组 子集

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的子集, 谢谢了
大话西游666
浏览 720回答 3
3回答

慕慕森

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数组中存在两次时错误多加一次。

牧羊人nacy

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

慕侠2389804

&nbsp;只是因为 A,B本身也是在数组里的. [A1,A2,A3...], [B1,B2,B3...]都用for嵌套的话可能效率上有点低.sub is_subset {(@a, @b) = @_;my $flag = 1;my %uniq = ();my @tmp =&nbsp;map&nbsp;$uniq{$_}++, @b;for (@a) {unless (exists $uniq{$_}) { $flag = 0 and last }}return $flag;}
随时随地看视频慕课网APP
我要回答