Project

General

Profile

Actions

Feature #8707

open

Hash#reverse_each

Added by Glass_saga (Masaki Matsushita) over 7 years ago. Updated over 3 years ago.

Status:
Feedback
Priority:
Normal
Target version:
-
[ruby-core:56270]

Description

Currently, {}.reverse_each calls Enumerable#reverse_each.
It will make array and its size can be large.
I made Hash#reverse_each to avoid array creation and performance improvement.

benchmark:

require "benchmark"

Size = 10000
HASH = Hash[*Array.new(Size) {|i| [i, true] }.flatten]

Benchmark.bmbm do |x|
x.report("Hash#reverse_each") do
300.times do
HASH.reverse_each {|a, b|}
end
end
end

result:

trunk(r42256):
Rehearsal -----------------------------------------------------
Hash#reverse_each 1.210000 0.000000 1.210000 ( 1.207964)
-------------------------------------------- total: 1.210000sec

                    user     system      total        real

Hash#reverse_each 0.950000 0.000000 0.950000 ( 0.951069)

proposal:
Rehearsal -----------------------------------------------------
Hash#reverse_each 0.600000 0.000000 0.600000 ( 0.600242)
-------------------------------------------- total: 0.600000sec

                    user     system      total        real

Hash#reverse_each 0.450000 0.000000 0.450000 ( 0.459006)


Files

patch.diff (7.55 KB) patch.diff Glass_saga (Masaki Matsushita), 07/30/2013 10:58 PM
Actions

Also available in: Atom PDF