2016-09-19 5 views

Antwort

10

Wie @isebarn verwendet, split(s) ist nützlich zum Aufteilen einer Zeichenfolge in Wörter (bei Leerzeichen standardmäßig aufteilen):

julia> s = "1 2 3 4 5" 
"1 2 3 4 5" 

julia> split(s) 
5-element Array{SubString{String},1}: 
"1" 
"2" 
"3" 
"4" 
"5" 

Jetzt können Sie ein Array Verständnis verwenden:

[parse(Int, ss) for ss in split(s)] 

Hier parst parse(Int, ss) einen String ss in eine ganze Zahl.

Beachten Sie auch, dass dies einen eindimensionalen Vektor und kein zweidimensionales Array zurückgibt. Es gibt keinen Grund, hier ein zweidimensionales Array vorzuziehen - das ist ein natürlich eindimensionales Objekt.

+0

Ich stimme zu, dass es natürlich ist, eine eindimensionale Array zu erwarten, und es gibt keinen Grund, ich brauche die zweidimensionale. Ich werde meine Frage bearbeiten, danke für die Antwort. – Abhijith

+0

Wie wäre es auch mit der 0,5 Feature (Antwort von @DNF)? – Abhijith

5
int_s = map(x -> parse(x), split(s)) 

bearbeiten

oder als @ David P. Sanders schlägt vor, die ich mit

int_s = map(parse, split(s)) 

Ich bin damit einverstanden habe den Teil Int links, wie ich weiß nicht, ob Sie planen, von in der Zeichenfolge nur Ganzzahlen

+1

Beachten Sie, dass Sie dies als 'map (parse, split (s))' –

+0

schreiben können (und sollten) immer Spaß, neue Dinge zu lernen. Warum das "und sollte" Teil? – isebarn

+2

Sie erstellen eine neue Funktion, die die alte umschließt und genau dasselbe tut. Ich denke nicht, dass dies weg optimiert wird (obwohl es möglich ist), also wird das ein bisschen langsamer sein. Außerdem sieht es so aus, als würde etwas Komplizierteres vor sich gehen, während Sie eigentlich nur 'map'ping' parse' sind. Sie könnten z.B. schreibe meine Antwort wie folgt um: map (x-> parse (Int, x), split (s)) '; Hier müssen Sie die anonyme Funktion definieren, da Sie die Funktion 'parse (Int, x)' nicht direkt zuordnen können, da sie zwei Argumente anstelle von eins hat. Ich finde immer noch das Array Verständnis leichter zu folgen, obwohl –

8

Wenn Sie mit Version 0.5 oder höher können Sie auch dies tun:

int_s = parse.(split(s)) 

Der abschließende Punkt ist die neue kompakte Broadcast-Notation. Möglicherweise wird dies in zukünftigen Versionen die bevorzugte Syntax sein.

+0

Danke für Ihre Antwort, wird gebeten, in die angenommene Antwort aufgenommen zu werden. – Abhijith

Verwandte Themen