2014-03-05 26 views

回答

4
[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 
+0

魔法在哪裏?你能解釋爲什麼'注射'更快嗎? –

+2

因爲它不會生成中間字符串。它直接在數字內進行計算。在我看來,計算其定義後的十進制數字要簡單得多,而不是將數字一次轉換爲字符串,然後將其解析爲數字。 – sawa

+0

@sawa不錯的一個。謝謝 –

3

做如下:

=> [5, 1, 7 ,8].join.to_f 
=> # 5178.0 

這也是工作:

=> [1,2,3,4].join.to_i 
=> # 1234 
+0

哦,我明白了。我嘗試使用to_i,但我沒有方法錯誤。 – Bloodcount

1
arr = [5, 1, 7 ,8] 
arr.join.to_i 
+0

1.9.2-p320:011> arr = [5,1,7,8] => [5,1,7,8] 1.9.2-p320:012> arr.join.to_i => 5178 –