Как разбить строку с разделителями в Ruby и преобразовать ее в массив?

233

У меня есть строка

"1,2,3,4"

и я хотел бы преобразовать его в массив:

[1,2,3,4]

Как?

Нил Миддлтон
источник
11
"1,2 | 3; 42: 4711" .scan (/ \ d + /). Map {| i | i.to_i}
Йонас Эльфстрем

Ответы:

413
>> "1,2,3,4".split(",")
=> ["1", "2", "3", "4"]

Или для целых чисел:

>> "1,2,3,4".split(",").map { |s| s.to_i }
=> [1, 2, 3, 4]

Или для более поздних версий ruby ​​(> = 1.9 - как указал Алекс):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
источник
28
Помните, что если вы используете> = 1.9, вы можете просто использовать «1,2,3,4» .split (','). Map (: to_i)
Alex Fort
7
Если вы используете активную поддержку, вы можете сделать: map (&: to_i)
jonnii
31

"1,2,3,4".split(",") как строки

"1,2,3,4".split(",").map { |s| s.to_i } как целые числа

Оливер Н.
источник
19

Ибо String Integerбез места, какString

arr = "12345"

arr.split('')

output: ["1","2","3","4","5"]

Ибо String Integerс пространством какString

arr = "1 2 3 4 5"

arr.split(' ')

output: ["1","2","3","4","5"]

Ибо String Integerбез места, какInteger

arr = "12345"

arr.split('').map(&:to_i)

output: [1,2,3,4,5]

Для строки

arr = "abc"

arr.split('')

output: ["a","b","c"]

Пояснение :

  1. arr -> строка, которую вы собираетесь выполнить любое действие.
  2. split() -> это метод, который разделяет ввод и сохраняет его как массив.
  3. ''или ' 'или ','-> это значение, которое необходимо удалить из заданной строки.
Аравин
источник
1

Самый простой способ преобразовать строку с разделителем в виде запятой - это просто использовать метод split

"1,2,3,4".split(',') # "1", "2", "3", "4"]

Вы можете найти больше информации о том, как использовать метод split в документах ruby.

Делит str на подстроки на основе разделителя, возвращая массив этих подстрок.

Если pattern является String, то его содержимое используется в качестве разделителя при разбиении str. Если шаблон представляет собой один пробел, str разделяется на пробельные символы, причем начальные пробельные символы и серии непрерывных пробельных символов игнорируются.

Если pattern является регулярным выражением, str делится там, где образец совпадает. Всякий раз, когда шаблон соответствует строке нулевой длины, str разбивается на отдельные символы. Если шаблон содержит группы, соответствующие совпадения будут также возвращены в массиве.

Если шаблон опущен, значение $; используется. Если $; равен nil (это значение по умолчанию), str разделяется на пробелы, как если бы было указано `'.

Если параметр limit пропущен, завершающие нулевые поля подавляются. Если limit является положительным числом, будет возвращено не более того количества полей (если limit равно 1, вся строка возвращается как единственная запись в массиве). При отрицательном значении число возвращаемых полей не ограничено, а завершающие нулевые поля не подавляются.

MZaragoza
источник
-1
"12345".each_char.map(&:to_i)

each_charделает в основном то же самое, что и split(''): Он разбивает строку на массив своих символов.

хммм, я только сейчас понимаю, что в исходном вопросе строка содержит запятые, поэтому мой ответ не очень полезен ;-( ..

andiba
источник
3
Вы можете отредактировать свой ответ, чтобы объяснить, что вы делаете?
М.Зарагоса