improve Enumerable#reverse_each to be efficient
authorYukihiro "Matz" Matsumoto <[email protected]>
Mon, 24 Mar 2014 09:39:06 +0000 (24 18:39 +0900)
committerYukihiro "Matz" Matsumoto <[email protected]>
Mon, 24 Mar 2014 09:39:06 +0000 (24 18:39 +0900)
mrbgems/mruby-array-ext/mrblib/array.rb
mrbgems/mruby-enum-ext/mrblib/enum.rb

index 337cef6..feec10e 100644 (file)
@@ -201,4 +201,14 @@ class Array
       self.replace(result)
     end
   end
+
+  # for efficiency
+  def reverse_each(&block)
+    i = self.size - 1
+    while i>=0
+      block.call(self[i])
+      i -= 1
+    end
+    self
+  end
 end
index 6ac1812..0ce1d76 100644 (file)
@@ -519,8 +519,8 @@ module Enumerable
 
   def reverse_each(&block)
     ary = []
-    self.each {|*val| ary.unshift(*val) }
-    ary.each {|*val| block.call(*val) }
+    self.each {|*val| ary.push(val.__svalue) }
+    ary.reverse_each(&block)
     self
   end
 end