Tôi có một số các số hex và tôi cần phải đi qua các số khác và kiểm tra xem chúng có xuất hiện trong mảng đó hay không. Ngay bây giờ tôi đang sử dụng một vòng lặp foreach
mà đi qua toàn bộ mảng mỗi lần. Có cách nào để làm cho nó nhanh hơn bằng cách phân loại mảng lúc đầu, và sau đó thực hiện tìm kiếm nhị phân trên đó.tìm kiếm nhị phân trong một mảng trong Perl
Mã vào lúc này:
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
}
}
Bạn có một lỗi rất tinh tế trong đó. Biến phù hợp '$ 1' là * không * được đặt lại, do đó khi nó được xác định, biến đó sẽ vẫn được xác định, bất kể có khớp regexp hay không. Bạn nên kiểm tra xem liệu 'x = ~ y' có được xác định hay không, để xác định xem có phù hợp với – Dancrumb
Đây có phải là bài tập về nhà không? Nếu vậy, đó là một điều ... nếu không, bạn nên sử dụng một mô-đun CPAN để làm điều này. – Dancrumb
Nó không phải là bài tập về nhà. Mô hình nào chính xác? Tôi đã kiểm tra danh sách mô hình và dường như không có mô hình tìm kiếm nhị phân ở đó. – SIMEL