Назначение
item = item.to_i
Исправит вывод в tf
, но ваш возвращенный ответ все равно будет содержать все строки.Если вы хотите сделать это один за другим, как вы делаете, вам нужно будет присвоить его обратно в индекс массива:
answer.each_with_index do |item, index|
answer[index] = item.to_i
end
Хотя, еще лучший способ сделать это будет с map
(возвращает новый массив) или map!
(на месте):
# return this line (make it the last line in the method) or make sure
# to re-assign answer
answer.map(&:to_i)
# or do this one to use `answer` later on with all integers.
answer.map!(&:to_i)
(см. этот вопрос очто синтаксис &:to_i
).
Следует также отметить (возможно), что рубиисты вообще не любят циклы for
и предпочитают циклы each
.
Кроме того,строка:
Array(answer)
не изменяет answer
на месте и возвращает его приведение к массиву, поэтому строка ничего не делает:
a = "1"
Array(a) # => ["1"]
a # => "1"
a = Array(a) # => ["1"]
a # => ["1"]
Вы также, дондаже не нужно это делать, поскольку answer
уже является массивом, из которого вы split
его (вы могли бы также использовать chars
вместо split(//)
).Таким образом, строка unless answer.is_a?(Integer)
никогда не будет истинной.
Последнее, что я вижу, это то, что в более новых версиях ruby есть встроенный метод для всего этого, digits
:
35231.digits # => [1, 3, 2, 5, 3]