这是一个真正的超新手问题。
我有一个存储在数据库中的年龄。
当我从数据库中获得年龄时,我想得到每个数字。
示例:
User.age = 25
我想得到以下内容:
first = 5
second = 2
我似乎无法从数据中解决这个问题,因为它是一个修复号。
任何人都知道一个简洁明了的解决方案。
答案 0 :(得分:19)
您可以转换为字符串然后拆分成数字,例如
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]
请注意,上面的示例使用的是parallel assignment,如果您是Ruby新手,可能还没有遇到过这些示例。
答案 1 :(得分:7)
first, last = User.age.divmod(10)
答案 2 :(得分:5)
答案 3 :(得分: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
答案 4 :(得分:3)
http://www.ruby-doc.org/core/classes/String.html#M001210
25.to_s.each_char {|c| print c, ' ' }
这些东西很容易通过Ruby文档找到。
答案 5 :(得分:1)
不是最好的解决方案,只是为了收集:
User.age.chars.to_a.map(&:to_i)
#=> [5, 2]
first, second = User.age.chars.to_a.map(&:to_i)