Perl: Finde heraus, ob der Wert einer Variablen mit dem in einem Array übereinstimmt

7

Ich bin ein Perl-Neuling. Ich habe einen Code, in dem eine Variable während einer foreach-Schleife mit mehreren Werten geladen wird. Was ich tun möchte, ist eine Operation für diese Variable nur auszuführen, wenn sie in diesem Array ist. Was ist der effizienteste Weg dies in Perl zu tun, da die Daten, an denen ich arbeite, sehr groß sind.

Ein einfaches Beispiel für meine Frage ist, sagen wir, ich habe eine Reihe von Früchten, die ich möchte

%Vor%

Aber ich habe eine $ fruit-Variable in einer foreach-Schleife, die den Namen von Früchten aus einer Datendatei erhält, die alle verschiedenen Arten von Früchten enthält. Wie würde ich nur die Fälle von $ fruit auswählen, die sich in meinem @fruits_i_like-Array befinden?

    
sfactor 29.10.2010, 11:27
quelle

3 Antworten

10

Sie können einen Hash wie folgt verwenden:

%Vor%

Hier ist ein Benchmark, der diesen Weg vergleicht vs Mfontani Lösung

%Vor%

Ausgabe:

%Vor%     
Toto 29.10.2010, 12:03
quelle
11

Perl 5.10 oder höher?

%Vor%

Vor 5.10:

%Vor%

Der Nachteil ist, dass das ganze Array durchsucht wird, um Übereinstimmungen zu finden. Dies ist möglicherweise nicht die beste Option. In diesem Fall können Sie List::MoreUtils ' any() verwenden, was true zurückgibt, sobald es mit einem Wert übereinstimmt und nicht weiter durch das Array geht.

%Vor%

Happy Hacking!

    
mfontani 29.10.2010 11:43
quelle
9

Dies ist effektiv ein Nachschlageproblem. Es wäre schneller, die Werte von @fruits_i_like in einem Hash wie %fruits_i_like nachzuschlagen (was O (1) gegenüber dem O (n) eines Arrays ist).

Konvertieren Sie das Array mit der folgenden Operation in einen Hash:

%Vor%     
Zaid 29.10.2010 11:53
quelle

Tags und Links