Как разбить строку в Ruby и получить все элементы, кроме первого? - PullRequest
79 голосов
/ 26 августа 2009

Строка ex="test1, test2, test3, test4, test5"

когда я использую

ex.split(",").first

возвращает

"test1"

Теперь я хочу получить оставшиеся элементы, то есть `` test2, test3, test4, test5 ". Если я использую

ex.split(",").last

возвращает только

"test5"

Как заставить все оставшиеся предметы пропустить первый?

Ответы [ 9 ]

95 голосов
/ 26 августа 2009

Попробуйте это:

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

Теперь first будет первым значением, rest будет остальной частью массива.

42 голосов
/ 26 августа 2009
ex.split(',', 2).last

2 в конце говорит: разделить на 2 части, не более.

Как правило, split разделяет значение на столько частей, сколько может, используя второе значение, которое вы можете ограничить, сколько частей вы получите Использование ex.split(',', 2) даст вам:

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

как массив, вместо:

["test1", "test2", "test3", "test4", "test5"]
14 голосов
/ 26 августа 2009

Поскольку у вас есть массив, то, что вы действительно хотите, это Array#slice, а не split.

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]
9 голосов
/ 26 августа 2009

Вы, вероятно, опечатали несколько вещей. Из того, что я понял, вы начинаете со строки, такой как:

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

Затем вы хотите разделить его, чтобы сохранить только значимые подстроки:

array = string.split(/, /)

И, наконец, вам нужны только все элементы, кроме первого:

# 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

Это ответило на ваш вопрос?

5 голосов
/ 24 апреля 2013

Извините, что немного опоздал на вечеринку и немного удивился, что никто не упомянул метод drop :

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"
5 голосов
/ 26 августа 2009

если вы хотите использовать их как массив, который вы уже знали, иначе вы можете использовать каждый из них как отдельный параметр ... попробуйте это:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")
5 голосов
/ 26 августа 2009
ex="test1,test2,test3,test4,test5"
all_but_first=ex.split(/,/)[1..-1]
2 голосов
/ 19 декабря 2014

Вы также можете сделать это:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 
0 голосов
/ 07 февраля 2018

Попробуйте split(",")[i], где i - индекс в массиве результатов. split дает массив ниже

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

элемент которого доступен по индексу.

...