如果我想从0到5打印x 6.times {|x| p x}(0..5).each {|x| p x}0.upto(5) {|x| p x}for x in 0..5 p xend benchmark/ips是一个更好的工具. require 'benchmark/ips'Benchmark.ips do |x| x.report("times") { 6.times {|x| } } x.report("rang
6.times {|x| p x} (0..5).each {|x| p x} 0.upto(5) {|x| p x} for x in 0..5 p x endbenchmark/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时间可能会使循环迭代次数相形见绌.结果,它足够接近无所谓.