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?


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.


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

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]

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?



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"

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

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 

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.