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

che*_*ell 15 ruby ruby-on-rails

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

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

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

例:

User.age = 25
Run Code Online (Sandbox Code Playgroud)

我想得到以下内容:

first = 5
second = 2
Run Code Online (Sandbox Code Playgroud)

我似乎无法从数据中将其作为修复数量来解决这个问题.

任何人都知道干净简单的解决方案.

mik*_*kej 19

您可以转换为字符串然后拆分成数字,例如

first, second = User.age.to_s.split('')
=> ["2", "5"]
Run Code Online (Sandbox Code Playgroud)

如果您需要将个别数字作为Fixnums返回,您可以将它们映射回来,例如

first, second = User.age.to_s.split('').map { |digit| digit.to_i }
=> [2, 5]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用整数除法,例如

first, second = User.age.div(10), User.age % 10
=> [2, 5]
Run Code Online (Sandbox Code Playgroud)

请注意,上面的示例使用的是并行分配,如果您是Ruby新手,可能还没有遇到过.

  • `map {| digit | digit.to_i}`shortcut =>`map(&:to_i)` (4认同)
  • 另外:`n.to_s.chars.map(&:to_i)`. (2认同)

ste*_*lag 7

first, last = User.age.divmod(10)
Run Code Online (Sandbox Code Playgroud)


San*_*osh 7

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

25.digits
# => [5, 2]
Run Code Online (Sandbox Code Playgroud)

所以你可以做

first, second = user.age.digits
Run Code Online (Sandbox Code Playgroud)

  • 完美,目前最好的解决方案 (2认同)
  • 请注意,它以“反向”顺序返回数字,这意味着从数字25开始,数组中返回的第0个数字是5,而不是2 (2认同)