Project

General

Profile

Feature #8707

Updated by nobu (Nobuyoshi Nakada) about 1 year ago

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

 benchmark: 
 ```ruby 
 

 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) 
 ```

Back