2015-10-05 2 views
-1

Я пытаюсь разбить ввод строки в целочисленный формат.Преобразование строки в split, to integer

Пример:

x = "9 39 20 38 4 12" 

Если я использую x.to_i, он будет возвращать только первый номер:

9 

Если я использую x.split(' ').to_i я получаю:

undefined method `to_i' 

Как бы я пойдите об этом?

Попытка начать решать алгоритмы на:

https://www.hackerrank.com/challenges/simple-array-sum 

ответ

2

С split изменяет объект в массив, вам нужно итерацию по элементам массива и использовать to_i на каждом. К счастью, есть функция для этого:

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

, который является аббревиатурой:

x.split(' ').map { |num| num.to_i }

+0

Чтобы избежать проблем с несколькими пробелами вы можете использовать 'x.split (/ \ S + /)' .instead 'x.split ('')'. – knut

+0

@knut, по умолчанию 'split' совпадает с' split ('') '. 'split ('')' автоматически управляет несколькими пробелами между словами, поэтому достаточно использовать простую форму 'split', если вы не изменили значение' $; 'по умолчанию. '' a \ t b ".split # => [" a "," b "]'. –

+0

@theTinMan Спасибо за замечание - я не знал об этом. (Я должен проверить свои мысли, прежде чем отправлять их в следующий раз;)) – knut

Смежные вопросы