紧急求助啊,想破了脑袋都没想出来为啥

紧急求助啊,想破了脑袋都没想出来为啥

紧急求助啊,想破了脑袋都没想出来为啥
有两个数组A和B, B的元素实际上是A的一个子集,
A一共有112159个元素,而B有3170个元素, 现在要在A里把B里所有的元素都找来,并标上个*号打印出来;
我的程序是这样写的

foreach my$temp_A(@array_A){
my$flag=0;
foreach my$temp_B(@array_Bl){
if ($temp_A==$temp_B){
$flag=1;
last;
}
}

print $temp_A."*","\n" if $flag==1;

}
结果跑下来, 明明B有3170个元素,结果只找了2675个元素,,抓狂啊,,还有的就找不到了 :(

帮忙指点下吧,这个有啥快的方法没有啊,谢谢:)
你确认B是A的子集么?会不.
你确认B是A的子集么?会不会是交集
而且是不是元素都是数字,没有字母?

如果有字母的话,比较不要用 ==
应该用 eq 比较是否相同。

有一个方法可能会快一点
用正则。
把 @B 的元素连接成一个字符串,用空格分隔(假如元素里面没有空格的话)
然后 foreach (@A), 用 "$_" 匹配 那个字符串
匹配成功,表示这个 $_ 也在@B存在
否则不存在。
[quote]--my %hash_B; [quote]
my %hash_B;
@hash_B{ @array_B } = undef;
foreach my $arary_a ( @array_A ) {
print $array_a, " * \n" if exists $hash_B{ $array_a };
}[/quote]

上面的假设 A 里没有重复的元素。否则打印出来的结果会有重复。有重复的话就把 A 里的元素象 %hash_B 一样生成一个 hash.