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?


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.


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"]

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]

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?



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"

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(",")

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 

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.