Vergleich mehrerer Strings in Perl

7

Ich habe meinen Code so:

%Vor%

Gibt es eine Optimierung? Ich möchte etwas wie:

%Vor%     
sundar 06.02.2012, 08:26
quelle

5 Antworten

13

Abhängig vom Inhalt der Strings ist eine Regex sehr praktisch:

%Vor%

Wenn dies nicht möglich ist, können Sie über eine Liste springen:

%Vor%     
Marcelo Cantos 06.02.2012, 08:29
quelle
14

In Perl 5.10 oder besser:

%Vor%

Der Operator ~~ führt eine intelligente Übereinstimmung zwischen seinen Argumenten aus.

    
Eugene Yarmash 06.02.2012 08:35
quelle
2
  1. Verwenden Sie List::MoreUtils qw{any}

    %Vor%

    Dies ist möglicherweise schneller als die Verwendung von grep , da List::MoreUtils::any vorzeitig beendet wird, wenn eine Übereinstimmung gefunden wird, während grep eine vollständige Liste von Übereinstimmungen erstellen kann. Ich sage "könnte", weil Perl möglicherweise if (grep ... optimieren könnte. Es könnte nicht sein. Aber List::MoreUtils::any endet früh und ist deskriptiver als das if (grep ... idiom.

  2. Machen Sie einen Hash, der Schlüssel aller Zeichenfolgen enthält, die Sie abgleichen möchten

    %Vor%

    Dies hat den Nachteil einer Rüstzeit und der Kosten des für den Hash verwendeten Speichers, aber der Vorteil ist, dass die Übereinstimmungszeit eher wie O (log N) ist. Also, wenn Sie viele verschiedene Werte von $var haben, die Sie testen möchten, dann könnte es insgesamt schneller sein.

  3. Erstellen Sie eine Regex, die allen Ihren Strings entspricht

    %Vor%

    OK, das ist also in Ordnung, wenn Ihre Strings buchstäblich qw{str1 str2 str3} sind, aber was ist, wenn es sich um eine Liste beliebiger Strings handelt?

    Sie könnten Regexp :: Assemble verwenden, um eine Liste von Regexps zu einer einzigen optimierten Regexp zusammenzufassen.

zgpmax 06.02.2012 20:11
quelle
1

Konvertieren Sie für eine Liste festgelegter Zeichenfolgen Ihre Liste in einen Hashwert. Dies ist besonders nützlich, wenn Sie Ihre Liste mehrmals überprüfen und wenn Ihre Liste größer wird.

%Vor%     
mob 17.07.2015 20:37
quelle
0

Ich scherze halb, aber das wird es tun:

%Vor%

Siehe auch diesen Perl-Mönch-Thread

    
jwd 06.02.2012 22:00
quelle

Tags und Links