fastruby / fastruby/fast-ruby

reverse.detect vs select { ... }.last

未关闭
#98 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Ruby
星标
5.7k
派生
371
PR 合并指标
30 天内没有已合并 PR

描述

Third approach?

```
require 'benchmark/ips'

ARRAY = [*1..100]

def faster
ARRAY.reverse_each { |x| break x if (x % 10).zero? }
end

def fast
ARRAY.reverse.detect { |x| (x % 10).zero? }
end

def slow
ARRAY.select { |x| (x % 10).zero? }.last
end

Benchmark.ips do |x|
x.report('Enumerable#reverse_each + break') { faster }
x.report('Enumerable#reverse.detect') { fast }
x.report('Enumerable#select.last') { slow }
x.compare!
end
```

```
% ruby reverse.rb
Calculating -------------------------------------
Enumerable#reverse_each + break
115.335k i/100ms
Enumerable#reverse.detect
72.531k i/100ms
Enumerable#select.last
11.243k i/100ms
-------------------------------------------------
Enumerable#reverse_each + break
3.311M (± 7.2%) i/s - 16.493M
Enumerable#reverse.detect
1.255M (± 9.3%) i/s - 6.238M
Enumerable#select.last
129.592k (± 3.4%) i/s - 652.094k

Comparison:
Enumerable#reverse_each + break: 3310776.9 i/s
Enumerable#reverse.detect: 1255082.9 i/s - 2.64x slower
Enumerable#select.last: 129592.0 i/s - 25.55x slower
```

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。