Получить каждый индивидуальный номер из целого числа Fixnum Ruby on Rails
Это настоящий вопрос ультра новичков.
У меня есть возраст, хранящийся в базе данных.
Когда я получаю возраст из базы данных, я хочу получить каждую цифру.
Пример:
User.age = 25
Я хочу получить следующее:
first = 5
second = 2
Я не могу, по-видимому, бороться с данными как с их номером исправления.
Кто-нибудь знает чистое и простое решение.
Ответы
Ответ 1
Вы можете преобразовать в строку и затем разбить на цифры, например.
first, second = User.age.to_s.split('')
=> ["2", "5"]
Если вам нужны отдельные цифры обратно как Fixnums, вы можете их отобразить, например.
first, second = User.age.to_s.split('').map { |digit| digit.to_i }
=> [2, 5]
В качестве альтернативы вы можете использовать целочисленное деление, например.
first, second = User.age.div(10), User.age % 10
=> [2, 5]
Обратите внимание, что приведенные выше примеры используют параллельное назначение, которые вы, возможно, еще не встретили, если вы новичок в Ruby.
Ответ 2
first, last = User.age.divmod(10)
Ответ 3
http://www.ruby-doc.org/core/classes/String.html#M001210
25.to_s.each_char {|c| print c, ' ' }
Этот материал очень легко найти в документах Ruby.
Ответ 4
Ознакомьтесь с эталонами для множества решений здесь: http://gistflow.com/posts/873-integer-to-array-of-digits-with-ruby Лучше всего использовать divmod
в цикле:
def digits(base)
digits = []
while base != 0 do
base, last_digit = base.divmod(10)
digits << last_digit
end
digits.reverse
end
Ответ 5
Ruby 2.4 имеет метод Integer # digit. например:
25.digits
# => [5, 2]
Итак, вы можете сделать
first, second = user.age.digits
Ответ 6
Не лучшее решение, но только для коллекции:
User.age.chars.to_a.map(&:to_i)
#=> [5, 2]
first, second = User.age.chars.to_a.map(&:to_i)