Jak podzielić ciąg znaków w Rubim i uzyskać wszystkie elementy oprócz pierwszego?

83

Ciąg jest ex="test1, test2, test3, test4, test5"

kiedy używam

ex.split(",").first

wraca

"test1"

Teraz chcę uzyskać pozostałe elementy, tj. „Test2, test3, test4, test5”. Jeśli używam

ex.split(",").last

zwraca tylko

"test5"

Jak zdobyć wszystkie pozostałe przedmioty, pomijając pierwszy?

sgi
źródło
Czekaj, używasz split( Stringmetody) na Array?
Konrad Rudolph
przepraszam guyzz ... używam tutaj ciągu znaków .. edytuję pytanie
sgi

Odpowiedzi:

98

Spróbuj tego:

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

Teraz firstbędzie pierwsza wartość, resta reszta tablicy.

avdgaag
źródło
1
W jakiej wersji Rubiego? Wypróbowałem to w 1.8.7 i restzawiera tylko „test2”.
Jonas Elfström
7
prawdopodobnie chodziło ofirst,*rest = ex.split(/,/)
ezpz
Tak, nie mogłem wtedy przetestować mojej linii. first, *rest = ex.split(/,/)rzeczywiście miałam na myśli. Dzięki za wyjaśnienie tego.
avdgaag
Innym sposobem jest pobranie zakresu z wynikowej tablicy. things = ex.split(/,/); things[1..-1]
Russell B
44
ex.split(',', 2).last

2 na końcu mówi: podziel na 2 części, nie więcej.

Zwykle split tnie wartość na tak wiele części, jak to możliwe, używając drugiej wartości, możesz ograniczyć liczbę otrzymanych części. Użycie ex.split(',', 2)da ci:

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

jako tablica, zamiast:

["test1", "test2", "test3", "test4", "test5"]
user163365
źródło
Wadą jest to, że musisz to zrobić splitponownie, jeśli chcesz, aby wszystkie wartości oprócz pierwszych były tablicą, a nie ciągiem. Wciąż niezła sztuczka. Ponadto użycie ex.split(',', 2).lastnie zwróci wspomnianej tablicy, tylko jej ostatnią wartość, prawda?
avdgaag
Błąd kopiowania i wklejania haha, naprawiono go
user163365
15

Ponieważ masz tablicę, to czego naprawdę chcesz, to Array#slicenie split.

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]
Konrad Rudolph
źródło
3
Zatem w przypadku ciągu znaków chcesz ex.split(/, /).slice(1..-1)uzyskać wszystkie elementy oprócz pierwszych, zakładając, że nie interesuje Cię pierwsza wartość.
avdgaag
9

Prawdopodobnie błędnie wpisałeś kilka rzeczy. Z tego, co wiem, zaczynasz od łańcucha takiego jak:

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

Następnie chcesz go podzielić, aby zachować tylko znaczące podciągi:

array = string.split(/, /)

I na koniec potrzebujesz tylko wszystkich elementów oprócz pierwszego:

# 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

Czy to odpowiadało na twoje pytanie?

bltxd
źródło
6
ex="test1,test2,test3,test4,test5"
all_but_first=ex.split(/,/)[1..-1]
Jonas Elfström
źródło
6

Przepraszam trochę za spóźnienie na imprezę i trochę zdziwiony, że nikt nie wspomniał o metodzie dropu :

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"
Anand Shah
źródło
5

jeśli chcesz użyć ich jako tablicy, którą już znasz, w przeciwnym razie możesz użyć każdego z nich jako innego parametru ... spróbuj tego:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")
Raafat
źródło
2

Możesz też to zrobić:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 
Gill
źródło
0

Spróbuj, split(",")[i]gdzie ijest indeks w tablicy wyników. splitdaje tablicę poniżej

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

którego element można uzyskać za pomocą indeksu.

lalit
źródło