ruby - 以下哪项是最有效的

标签 ruby loops

如果我想打印 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/

相关文章:

ruby-on-rails - 使用 gem install rails,现在我有 4.0.0.rc1 - 我想要 Rails 3

仅用于一个输入的 Ruby 多行输入

ruby - 为构造函数外的实例变量指定默认值

ruby - 如何禁用数据库 :schema:dump for migrations

c - 使用 C 生成 IPv4 范围内的所有 IP 地址

javascript - for循环 react

ruby - 在 RubyMine 中设置默认的 Ruby 变量

PHP 循环数组直到索引改变

c++ - 遍历 C++ 映射时的奇怪行为

java - 如何在 3.5 秒后停止并跳过命令?