2010-12-13 11 views
-1
my @array = [ 'TEXT[12]|SubText' , 'TEXT2|subText2' , 'TEXT3[34]' ] ; 

Ich war auf der Suche dieses Array in ein anderes Array wiewie Split-Array in ein anderes arrary

('TEXT','12','SubText','TEXT2','SubText2','TEXT3','34') 

ich wirklich nicht, was verwende ich ohne jede zusätzliche Module?

+4

sieht aus wie ein seltsames Quelldatenformat, es ist schwer zu sagen, was los ist .. ist die Pipe ein Trennzeichen, und die [] optional? – zanlok

+0

es ist egal. Wenn das Array so aussieht, wie teilt man es in ein anderes Array auf! – Tree

+4

Wie können Sie sagen, es ist egal? Datenformat zählt! Sie können einen Film nicht auf magische Weise wiedergeben oder eine Bilddatei anzeigen, ohne das Datenformat zu kennen. Ihr Beispiel ist das Entfernen des Inhalts der eckigen Klammern und alles nach einer Pipe, aber es reicht nicht aus, um alle Datenmuster zu sehen, die es gibt (ich wette). – zanlok

Antwort

4

Teilen Sie die Array-Elemente entweder auf oder ] oder |? Wenn ja, können Sie tun;

my @array = ('TEXT[12]|SubText' , 'TEXT2|subText2' , 'TEXT3[34]'); 
my @result; 

foreach(@array) { 
     push @result,split/[\[\]\|]+/; 
} 

Ideone Link

+2

'map' wäre sogar noch besser als explizit' push'. – Ether

+0

Sie müssen nur das ']' zitieren, also '/ [[\] |] + /' ist IMO klarer. – justintime

3

, die wahrscheinlich nicht tun, was Sie denken, es tut. Es erstellt ein anonymes Array mit den Elementen TEXT [12] | SubText ',' TEXT2 | subText2 ',' TEXT3 [34] 'und weist es dann als erstes Element von @array zu!

Aber wenn es ist, was Sie tun wollen, dann müssen Sie nur noch den zusätzlichen Schritt fügen Sie es dereferenzieren:

my @array = [ 'TEXT[12]|SubText' , 'TEXT2|subText2' , 'TEXT3[34]' ] ; 

for my $item (@array) { 
    my @inner_elem_array = map { /(\w+)/g } @$item; 
    #Do stuff with the new array here. 
} 

EDIT: Falls dies immer noch keinen Sinn macht für Sie, ich d empfehlen zu lesen über references und regular expressions.

+0

ziemlich elegant. Ich denke, er erwartet das "Do-Zeug", um ein Master-Array anzuhängen. – zanlok

+0

Vielleicht etwas wie das, dann? mein @master_array; push @master_array, [map {/ (\ w +)/g} @ $ item] für meine $ item (@array); Oder meine @master_array = Karte {[Karte {/ (\ w +)/g} @ $ _]} @array; Aber ich denke, ein Kätzchen stirbt oder etwas, wenn Sie anfangen, Karten zu stapeln. :) – Hugmeir

Verwandte Themen