diff options
| -rw-r--r-- | mrblib/hash.rb | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/mrblib/hash.rb b/mrblib/hash.rb index 9a8bd8a7b..87e517b97 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -86,7 +86,14 @@ class Hash def each(&block) return to_enum :each unless block_given? - self.keys.each { |k| block.call [k, self[k]] } + keys = self.keys + vals = self.values + len = self.size + i = 0 + while i < len + block.call [keys[i], vals[i]] + i += 1 + end self end @@ -203,8 +210,7 @@ class Hash return to_enum :reject! unless block_given? keys = [] - self.each_key{|k| - v = self[k] + self.each{|k,v| if b.call([k, v]) keys.push(k) end @@ -221,8 +227,7 @@ class Hash return to_enum :reject unless block_given? h = {} - self.each_key{|k| - v = self[k] + self.each{|k,v| unless b.call([k, v]) h[k] = v end @@ -235,8 +240,7 @@ class Hash return to_enum :select! unless block_given? keys = [] - self.each_key{|k| - v = self[k] + self.each{|k,v| unless b.call([k, v]) keys.push(k) end @@ -253,8 +257,7 @@ class Hash return to_enum :select unless block_given? h = {} - self.each_key{|k| - v = self[k] + self.each{|k,v| if b.call([k, v]) h[k] = v end |
