summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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
##