У меня есть массив шестнадцатеричных чисел, и мне нужно перебирать другие числа и проверять, отображаются ли они в этом массиве. Прямо сейчас я использую цикл 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
}
}