从Fixnum整数Ruby on Rails中获取每个单独的数字

时间:2011-03-21 13:13:42

标签: ruby-on-rails ruby

这是一个真正的超新手问题。

我有一个存储在数据库中的年龄。

当我从数据库中获得年龄时,我想得到每个数字。

示例:

User.age = 25

我想得到以下内容:

first = 5
second = 2

我似乎无法从数据中解决这个问题,因为它是一个修复号。

任何人都知道一个简洁明了的解决方案。

6 个答案:

答案 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)

Ruby 2.4有Integer#digits方法。例如:

25.digits
# => [5, 2]

所以你可以做到

first, second = user.age.digits

答案 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)