mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
add Hash#{select/reject} to return Hash as 1.9
This commit is contained in:
@@ -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
|
||||
|
||||
##
|
||||
|
||||
Reference in New Issue
Block a user