【发布时间】:2011-06-08 08:53:22
【问题描述】:
我有一个十六进制数字数组,我需要检查其他数字并检查它们是否出现在该数组中。现在我正在使用一个foreach 循环,每次都会遍历整个数组。有没有办法通过先对数组进行排序,然后对其进行二分查找来加快速度。
此刻的代码:
sub is_bad_str{
my ($str, @keys) = @_;
my $flag = 0;
my ($key, $hex_num);
if ($str =~ m/14'h([0-9a-f][0-9a-f][0-9a-f][0-9a-f])/;){ #'# fixes bad highlighting
$hex_num = $1;
}
if (defined $hex_num){
foreach $key (@keys){
if ($hex_num =~ /\Q$key\E/i){
$flag = 1;
last;
}
}
}
if (($flag == 0) && (defined $hex_num)){
return 1;#Bad str
}else{
return 0;#Good str
}
}
【问题讨论】:
-
你有一个非常微妙的错误。匹配变量
$1是not 重置的,因此一旦定义,它将保持定义,无论是否存在正则表达式匹配。您应该检查是否定义了x=~y,以确定是否存在匹配 -
这是作业吗?如果是这样,那是一回事......如果不是,您应该使用 CPAN 模块来执行此操作。
-
这不是家庭作业。具体是什么型号?我查看了模型列表,那里似乎没有二进制搜索模型。
-
我做了 Dancrumb 建议的编辑,虽然它正在等待批准。在这篇文章中,我详细说明了为什么它是必要的(我在我需要的一些代码中找到了它)stackoverflow.com/q/4045467/468327
标签: perl binary-search