Ruby中是否有任何优雅的方法将数字转换为数字数组

时间:2015-04-12 17:47:20

标签: ruby arrays string fixnum

对于数字n,我只能想到

array_of_digits = n.to_s.split('').map(&:to_i)

还有更优雅的方法吗?

1 个答案:

答案 0 :(得分:6)

不是更优雅,但更快:

def digits(n)
  (0..Math.log10(n).to_i).map { |dp| n / 10 ** dp % 10 }.reverse
end

我刚发现的另一个快速(最快)

def digits(n)
  n.to_s.each_byte.map { |x| x - 48 }
end

基准:

            user     system      total        real
Split map  0.410000   0.000000   0.410000 (  0.412397)
chars      0.100000   0.010000   0.110000 (  0.104450)
each byte  0.070000   0.000000   0.070000 (  0.068171)
Numerical  0.100000   0.000000   0.100000 (  0.101828)

顺便提一下,基准测试代码就在这里:https://gist.github.com/sid-code/9ad26dc4b509bfb86810