Wie teile ich eine Zeichenfolge in Ruby und erhalte alle Elemente außer dem ersten?

84

String ist ex="test1, test2, test3, test4, test5"

wenn ich benutze

ex.split(",").first

es kehrt zurück

"test1"

Jetzt möchte ich die restlichen Elemente erhalten, dh "test2, test3, test4, test5". Wenn ich benutze

ex.split(",").last

es wird nur zurückgegeben

"test5"

Wie bekomme ich alle verbleibenden Gegenstände, die zuerst übersprungen werden?

sgi
quelle
Warten Sie, Sie verwenden split(eine StringMethode) auf einem Array?
Konrad Rudolph
sorry guyzz ... ich benutze hier einen String .. ich werde die Frage bearbeiten
sgi

Antworten:

99

Versuche dies:

first, *rest = ex.split(/, /)

Jetzt firstwird der erste Wert sein, restwird der Rest des Arrays sein.

avdgaag
quelle
1
In welcher Version von Ruby? Ich habe es in 1.8.7 versucht und restenthält nur "test2".
Jonas Elfström
7
wahrscheinlich gemeintfirst,*rest = ex.split(/,/)
ezpz
Ja, ich konnte meine Leitung zu diesem Zeitpunkt nicht testen. first, *rest = ex.split(/,/)war in der Tat, was ich meinte. Danke, dass du das geklärt hast.
Avdgaag
Eine andere Möglichkeit besteht darin, einen Bereich aus dem resultierenden Array abzurufen. things = ex.split(/,/); things[1..-1]
Russell B
44
ex.split(',', 2).last

Die 2 am Ende sagt: in 2 Teile geteilt, nicht mehr.

Wenn Sie normalerweise teilen, wird der Wert in so viele Teile wie möglich geschnitten. Mit einem zweiten Wert können Sie die Anzahl der Teile begrenzen, die Sie erhalten. Verwenden ex.split(',', 2)wird Ihnen geben:

["test1", "test2, test3, test4, test5"]

als Array anstelle von:

["test1", "test2", "test3", "test4", "test5"]
user163365
quelle
Nachteil ist, dass Sie es spliterneut tun müssen, wenn Sie alle Werte außer den ersten als Array und nicht als Zeichenfolge verwenden möchten. Immer noch ein schöner Trick. Außerdem ex.split(',', 2).lastwürde using das von Ihnen erwähnte Array nicht zurückgeben, sondern nur den letzten Wert, oder?
Avdgaag
Copy-Paste-Fehler haha, behoben
user163365
15

Da Sie ein Array haben, wollen Sie wirklichArray#slice nicht split.

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]
Konrad Rudolph
quelle
3
Mit einer Zeichenfolge möchten ex.split(/, /).slice(1..-1)Sie also alle Elemente außer den ersten erhalten, vorausgesetzt, Sie interessieren sich nicht für den ersten Wert.
Avdgaag
9

Sie haben wahrscheinlich ein paar Dinge falsch geschrieben. Soweit ich weiß, beginnen Sie mit einer Zeichenfolge wie:

string = "test1, test2, test3, test4, test5"

Dann möchten Sie es teilen, um nur die signifikanten Teilzeichenfolgen beizubehalten:

array = string.split(/, /)

Und am Ende brauchen Sie nur alle Elemente außer dem ersten:

# We extract and remove the first element from array
first_element = array.shift

# Now array contains the expected result, you can check it with
puts array.inspect

Hat das deine Frage beantwortet?

bltxd
quelle
6
ex="test1,test2,test3,test4,test5"
all_but_first=ex.split(/,/)[1..-1]
Jonas Elfström
quelle
6

Tut mir leid, ein bisschen zu spät zur Party und ein bisschen überrascht, dass niemand die Drop- Methode erwähnt hat:

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"
Anand Shah
quelle
5

Wenn Sie sie als Array verwenden möchten, das Sie bereits kannten, können Sie jeden einzelnen als anderen Parameter verwenden ... versuchen Sie Folgendes:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")
Raafat
quelle
2

Sie können dies auch tun:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 
G Gill
quelle
0

Versuchen Sie, split(",")[i]wo isich der Index im Ergebnisarray befindet. splitgibt Array unten

["test1", " test2", " test3", " test4", " test5"] 

Auf dessen Element kann über den Index zugegriffen werden.

lalit
quelle