Ruby将Array转换为Fixnum

Sta*_*ovv 1 ruby

在研究它时,我没有找到任何相关的东西.我基本上试图将数组转换为例如[5, 1, 7 ,8]具有值的fixnum 5178.

Зел*_*ный 6

执行以下操作:

 => [5, 1, 7 ,8].join.to_f
 => # 5178.0
Run Code Online (Sandbox Code Playgroud)

这也可以:

 => [1,2,3,4].join.to_i
 => # 1234
Run Code Online (Sandbox Code Playgroud)


saw*_*awa 5

[5, 1, 7 ,8].inject{|n, d| n * 10 + d}
# => 5178
Run Code Online (Sandbox Code Playgroud)

对照

t = Time.now
100000.times do
  [5, 1, 7 ,8].inject{|n, d| n * 10 + d}
end
Time.now - t # => 0.108719628

t = Time.now
100000.times do
  [5, 1, 7, 8].join.to_i
end
Time.now - t # => 0.246565502
Run Code Online (Sandbox Code Playgroud)

  • 因为它不会生成中间字符串.它直接在数字中进行计算.在我看来,在定义之后计算十进制数字要简单得多,而不是将数字一次转换为字符串,然后将其解析为数字. (2认同)