fastruby / fastruby/fast-ruby

Enumerable#sort_by is not always faster than #sort

Offen
#120 7 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Array Enumerable
Vorherrschende Sprache
Ruby
Sterne
5.7k
Forks
371
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Per the Ruby 2.4.0 docs:

> The current implementation of sort_by generates an array of tuples containing the original collection element and the mapped value. This makes sort_by fairly expensive when the keysets are simple.

Here's a concrete example showing `sort` to be 2.70x faster in Ruby 1.9.3, 2.3.3 and 2.4.0:
```ruby
require 'benchmark/ips'

Benchmark.ips do |x|
x.time = 5
x.warmup = 2

ARRAY = %w{apple pear fig}

x.report("sort_by") do
ARRAY.sort_by(&:length)
end

x.report("sort") do
ARRAY.sort { |a, b| a.length <=> b.length}
end

x.compare!
end
```
```
Warming up --------------------------------------
sort_by 56.348k i/100ms
sort 111.946k i/100ms
Calculating -------------------------------------
sort_by 635.646k (±16.1%) i/s - 3.099M in 5.074036s
sort 1.713M (±16.3%) i/s - 8.284M in 5.023904s

Comparison:
sort: 1713232.1 i/s
sort_by: 635645.9 i/s - 2.70x slower
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.