这是一个真正的超新手问题。从Fixnum整数获取每个单独的数字Ruby on Rails
我有一个存储在数据库中的年龄。
当我从数据库中获得年龄时,我想获取每个单独的数字。
例子:
User.age = 25
我希望得到以下几点:
first = 5
second = 2
我似乎无法从数据作为其修复NUM搏斗此。
任何人都知道一个干净和简单的解决方案。
这是一个真正的超新手问题。从Fixnum整数获取每个单独的数字Ruby on Rails
我有一个存储在数据库中的年龄。
当我从数据库中获得年龄时,我想获取每个单独的数字。
例子:
User.age = 25
我希望得到以下几点:
first = 5
second = 2
我似乎无法从数据作为其修复NUM搏斗此。
任何人都知道一个干净和简单的解决方案。
您可以转换为一个字符串,然后分割成数字,例如
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。
http://www.ruby-doc.org/core/classes/String.html#M001210
25.to_s.each_char {|c| print c, ' ' }
这东西是很容易通过的Ruby文档找到。
我正在转换为一个字符串,然后使用字符串[0] .chr。我认为一定有更好的办法。这个divmod(10)非常酷且紧凑。 – chell 2011-03-21 14:00:34
不是最好的解决办法,但只是为了收集:
User.age.chars.to_a.map(&:to_i)
#=> [5, 2]
first, second = User.age.chars.to_a.map(&:to_i)
退房的基准进行了大量的解决方案在这里: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
不错,但作为通用的方法,这有一个缺陷:它会返回'[]'为'0' 。这可以通过用'loop'替换'while base!= 0'来解决,并且在该循环的底部添加'returns digits.reverse if base == 0',而不是循环外部的返回值。但它仍然会无限循环负数。 – daniero 2015-07-20 16:27:53
'地图{|位| digit.to_i}'shortcut =>'map(&:to_i)' – fl00r 2011-03-21 13:42:21
另外:'n.to_s.chars.map(&:to_i)'。 – tokland 2013-05-05 12:56:06