Як розділити рядок у Ruby та отримати всі елементи, крім першого?


83

Рядок є ex="test1, test2, test3, test4, test5"

коли я використовую

ex.split(",").first

воно повертається

"test1"

Тепер я хочу отримати інші елементи, тобто `" test2, test3, test4, test5 ". Якщо я використовую

ex.split(",").last

він повертається лише

"test5"

Як змусити всі інші елементи пропустити перший?


Зачекайте, ви використовуєте split( Stringметод) на Array?
Конрад Рудольф

вибачте guyzz ... я використовую тут рядок .. я відредагую питання
sgi

Відповіді:


98

Спробуйте це:

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

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


1
В якій версії Ruby? Я спробував це в 1.8.7 і restмістить лише "test2".
Jonas Elfström

7
ймовірно, малося на увазіfirst,*rest = ex.split(/,/)
ezpz

Так, я тоді не міг перевірити свою лінію. first, *rest = ex.split(/,/)справді було те, що я мав на увазі. Дякуємо за роз'яснення.
avdgaag

Інший спосіб - отримати діапазон з отриманого масиву. things = ex.split(/,/); things[1..-1]
Рассел Б

44
ex.split(',', 2).last

У кінці 2 написано: розділити на 2 частини, не більше.

як правило, поділ розріже значення на стільки частин, скільки зможе, використовуючи друге значення, ви можете обмежити кількість одиниць, які отримаєте. Використання ex.split(',', 2)дасть вам:

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

як масив, а не:

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

Недоліком є ​​те, що вам доведеться splitзнову, якщо ви хочете всі значення, крім перших, як масив, а не як рядок. Все-таки приємний фокус. Крім того, використання ex.split(',', 2).lastне поверне згаданий вами масив, лише його останнє значення, чи не так?
avdgaag

Помилка копіювання-вставлення ха-ха, виправлено
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

Це відповіло на ваше запитання?



6

Вибачте трохи пізно на вечірку і трохи здивований тим, що ніхто не згадав метод краплі :

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

елемент якого може бути доступний за допомогою індексу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.