如果我想打印 x 从 0 到 5
6.times {|x| p x}
(0..5).each {|x| p x}
0.upto(5) {|x| p x}
for x in 0..5
p x
end
最佳答案
benchmark/ips是一个更好的工具。
require 'benchmark/ips'
Benchmark.ips do |x|
x.report("times") { 6.times {|x| } }
x.report("range iteration") { (0..5).each {|x| } }
x.report("upto") { 0.upto(5) {|x| } }
x.report("for") do
for x in 0..5
end
end
end
Ruby 2.2.0 上的结果:
Calculating -------------------------------------
times 88.567k i/100ms
range iteration 88.519k i/100ms
upto 86.749k i/100ms
for 84.118k i/100ms
-------------------------------------------------
times 2.093M (± 0.2%) i/s - 10.451M
range iteration 2.053M (± 0.4%) i/s - 10.268M
upto 2.103M (± 0.2%) i/s - 10.583M
for 1.949M (± 0.2%) i/s - 9.758M
在这里循环空体是更好的主意,因为 p
的 IO 时间可能会使循环迭代时间相形见绌。就结果而言,它足够接近无关紧要。
关于ruby - 以下哪项是最有效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708476/