Ruby将数组转换为Fixnum

Ruby将数组转换为Fixnum,ruby,Ruby,我在研究它的时候没有找到任何相关的东西。我主要尝试将数组(例如[5,1,7,8]转换为一个fixnum,其值为5178) 按以下步骤操作: => [5, 1, 7 ,8].join.to_f => # 5178.0 这也是一项工作: => [1,2,3,4].join.to_i => # 1234 比较 t = Time.now 100000.times do [5, 1, 7 ,8].inject{|n, d| n * 10 + d} end Time.

我在研究它的时候没有找到任何相关的东西。我主要尝试将数组(例如
[5,1,7,8]
转换为一个fixnum,其值为
5178

按以下步骤操作:

 => [5, 1, 7 ,8].join.to_f
 => # 5178.0
这也是一项工作:

 => [1,2,3,4].join.to_i
 => # 1234
比较

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

哦,我明白了。我尝试使用to_I,但没有得到方法错误。1.9.2-p320:011>arr=[5,1,7,8]=>[5,1,7,8]1.9.2-p320:012>arr.join.to_I=>5178,因为它不生成中间字符串。它直接用数字进行计算。在我看来,按照定义计算十进制数字要简单得多,而不是一次将数字转换为字符串,然后将其解析为数字。@sawanice。Thanks@sawa我建议对使用.inject(0)进行一个小的修改,它增加了起始结果值的可读性。[5,1,7,8].injection(0){n,d{n*10+d}@sawa我们也可以使用基准进行比较,您可能已经知道了,尽管在这里仔细看一下,请要求'benchmark'arr=[5,1,7,8]benchmark.bm do|x.report{arr.join.to|i}x.report{arr.inject result,ele u val*10+ele val}最终用户系统总实际0.0000000.0000000.000000(0.000015)0.0000000.0000000.000000(0.000009)
[5, 1, 7 ,8].inject{|n, d| n * 10 + d}
# => 5178
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