diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-02 23:21:12 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-02 23:21:12 +0900 |
| commit | d060c8a713cbfd356fd3814339bf6248d76f3507 (patch) | |
| tree | 14bbacedc1c7547d2fed9beb82978ee45136e99c /mrblib/hash.rb | |
| parent | 22568f9a99d724c72e5bc5acb46e7df688466803 (diff) | |
| download | mruby-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.rb | 56 |
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 ## |
