Ho una matrice di numeri esadecimali, e ho bisogno di andare oltre altri numeri e controllare se compaiono in quella matrice. In questo momento sto usando un ciclo foreach
che ricopre l'intero array ogni volta. C'è un modo per renderlo più veloce ordinando l'array all'inizio, e quindi implementando la ricerca binaria su di esso.ricerca binaria in una matrice in Perl
Il codice in questo momento:
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
}
}
si dispone di un bug sottile in là. La variabile di corrispondenza '$ 1' è * non * ripristinata, quindi una volta definita, rimarrà definita, indipendentemente dal fatto che ci sia una corrispondenza di espressioni regolari. Dovresti controllare se 'x = ~ y' è definito, per determinare se c'è stata una corrispondenza – Dancrumb
È questo compito? Se è così, questa è una cosa ... se no, dovresti usare un modulo CPAN per farlo. – Dancrumb
Non è compito. Quale modello esattamente? Ho controllato la lista dei modelli e non sembra che ci sia un modello di ricerca binaria lì. – SIMEL