Perl Splitting Array basierend auf Bedingung mit grep

8

Ich habe Perlcode, der ungefähr so ​​aussieht:

%Vor%

Das funktioniert ganz gut, aber ich möchte das ursprüngliche Array auf der Grundlage einer einzigen Operation in zwei Teile aufteilen ... Ich denke, ich führe doppelt so viele Operationen durch, wie unbedingt nötig.

Hilfe geschätzt !! Vielen Dank.

    
hardingnj 23.12.2011, 15:46
quelle

3 Antworten

6

Bei weitem die einfachste Methode besteht darin, Ihr Array zu iterieren und je nach Bedingung Werte auf eines der beiden Arrays zu setzen, wie im folgenden Beispiel.

%Vor%

Wenn Sie das Quell-Array modifizieren möchten:

%Vor%

Warum haben Sie List :: MoreUtils :: part nicht empfohlen?

Das fragliche Modul existiert möglicherweise nicht auf dem Zielsystem, was immer eine lästige Sache ist.

Auch auf dem System, auf dem ich Tests durchgeführt habe, habe ich festgestellt, dass List::MoreUtils::part doppelt so langsam war wie das erste Snippet in diesem Post, obwohl es bei verschiedenen Implementierungen von part eigentlich genau umgekehrt sein könnte.

    
Filip Roséen - refp 23.12.2011, 15:59
quelle
10

Hier finden Sie part von Liste :: MoreUtils ist sehr praktisch.

%Vor%

Das funktioniert gut, wenn Sie jedes Eingabeelement in genau einem Array der Ausgabe haben wollen.

Wenn Sie sie in mehr als eines der Arrays einfügen möchten, müssen Sie sie selbst durchlaufen.
Der beste Weg dazu ist eine foreach Schleife.

%Vor%

Wenn es viele ähnliche Überprüfungen gibt, die Sie tun müssen, sollten Sie vielleicht auch die Ergebnisse Ihrer Tests wiederholen.

%Vor%     
Brad Gilbert 23.12.2011 16:55
quelle
3

Ich liebe die Einfachheit von List::MoreUtils " part function:

%Vor%

Das resultierende @parts -Array ist ein Array von Arrayrefs. @$parts[0] ist das Array von Elementen, die false zurückgegeben haben. @$parts[1] hat true zurückgegeben.

    
Zaid 23.12.2011 21:31
quelle

Tags und Links