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

83

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

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

ex.split(",").first

он возвращается

"test1"

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

ex.split(",").last

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

"test5"

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

sgi
источник
Подождите, вы используете split( Stringметод) на Array?
Конрад Рудольф,
извините, парень ... я здесь использую строку .. я отредактирую вопрос
sgi

Ответы:

98

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

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

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

avdgaag
источник
1
В какой версии Ruby? Я пробовал это в 1.8.7 и restсодержит только "test2".
Йонас Эльфстрём,
7
вероятно имелось ввидуfirst,*rest = ex.split(/,/)
ezpz
Да, в то время я не мог проверить свою линию. first, *rest = ex.split(/,/)действительно было то, что я имел в виду. Спасибо, что прояснили это.
avdgaag
Другой способ - получить диапазон из результирующего массива. things = ex.split(/,/); things[1..-1]
Russell B
44
ex.split(',', 2).last

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

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

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

в виде массива вместо:

["test1", "test2", "test3", "test4", "test5"]
user163365
источник
Обратной стороной является то, что вам придется splitснова, если вам нужны все значения, кроме первых, в виде массива, а не строки. Тем не менее хороший трюк. Кроме того, использование ex.split(',', 2).lastне вернет указанный массив, а только его последнее значение, верно?
avdgaag
Ошибка Copy-Paste, ха-ха, исправлена
user163365
15

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

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]
Конрад Рудольф
источник
3
Итак, со строкой вы хотите ex.split(/, /).slice(1..-1)получить все элементы, кроме первых, при условии, что вас не интересует первое значение.
avdgaag
9

Вероятно, вы опечатали несколько вещей. Насколько я понимаю, вы начинаете со строки, например:

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

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

bltxd
источник
6
ex="test1,test2,test3,test4,test5"
all_but_first=ex.split(/,/)[1..-1]
Йонас Эльфстрём
источник
6

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

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"
Ананд Шах
источник
5

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

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")
Раафат
источник
2

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

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 
Джи Гилл
источник
0

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

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

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

лалит
источник