Ich habe ein Array von Hex-Zahlen, und ich muss über andere Zahlen gehen und prüfen, ob sie in diesem Array erscheinen. Im Moment verwende ich eine foreach
Schleife, die jedes Mal über das gesamte Array geht. Gibt es eine Möglichkeit, es schneller zu machen, indem Sie das Array zuerst sortieren und dann binäre Suche darauf implementieren.binäre Suche in einem Array in Perl
Der Code zur Zeit:
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
}
}
Sie haben eine sehr subtile Fehler drin. Die Übereinstimmungsvariable '$ 1' wird * nicht * zurückgesetzt. Sobald sie definiert ist, bleibt sie definiert, unabhängig davon, ob es eine Übereinstimmung mit regulären Ausdrücken gibt. Sie sollten überprüfen, ob 'x = ~ y 'definiert ist, um festzustellen, ob es eine Übereinstimmung gab – Dancrumb
Ist das Hausaufgabe? Wenn ja, ist das eine Sache ... wenn nicht, sollten Sie ein CPAN-Modul verwenden, um dies zu tun. – Dancrumb
Es ist keine Hausaufgabe. Welches Modell genau? Ich habe die Modellliste überprüft und es scheint dort kein binäres Suchmodell zu sein. – SIMEL