亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 767 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號