summaryrefslogtreecommitdiffhomepage
path: root/mrblib/hash.rb
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-02 23:21:12 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-02 23:21:12 +0900
commitd060c8a713cbfd356fd3814339bf6248d76f3507 (patch)
tree14bbacedc1c7547d2fed9beb82978ee45136e99c /mrblib/hash.rb
parent22568f9a99d724c72e5bc5acb46e7df688466803 (diff)
downloadmruby-d060c8a713cbfd356fd3814339bf6248d76f3507.tar.gz
mruby-d060c8a713cbfd356fd3814339bf6248d76f3507.zip
add Hash#{select/reject} to return Hash as 1.9
Diffstat (limited to 'mrblib/hash.rb')
-rw-r--r--mrblib/hash.rb56
1 files changed, 56 insertions, 0 deletions
diff --git a/mrblib/hash.rb b/mrblib/hash.rb
index d6ad55e47..dc85c8f5e 100644
--- a/mrblib/hash.rb
+++ b/mrblib/hash.rb
@@ -80,6 +80,62 @@ class Hash
end
h
end
+
+ # 1.8/1.9 Hash#reject! returns Hash; ISO says nothing.
+ def reject!(&b)
+ keys = []
+ self.each_key{|k|
+ v = self[k]
+ if b.call(k, v)
+ keys.push(k)
+ end
+ }
+ return nil if keys.size == 0
+ keys.each{|k|
+ self.delete(k)
+ }
+ self
+ end
+
+ # 1.8/1.9 Hash#reject returns Hash; ISO says nothing.
+ def reject(&b)
+ h = {}
+ self.each_key{|k|
+ v = self[k]
+ unless b.call(k, v)
+ h[k] = v
+ end
+ }
+ h
+ end
+
+ # 1.9 Hash#select! returns Hash; ISO says nothing.
+ def reject!(&b)
+ keys = []
+ self.each_key{|k|
+ v = self[k]
+ unless b.call(k, v)
+ keys.push(k)
+ end
+ }
+ return nil if keys.size == 0
+ keys.each{|k|
+ self.delete(k)
+ }
+ self
+ end
+
+ # 1.9 Hash#select returns Hash; ISO says nothing.
+ def select(&b)
+ h = {}
+ self.each_key{|k|
+ v = self[k]
+ if b.call(k, v)
+ h[k] = v
+ end
+ }
+ h
+ end
end
##