mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #1923 from ksss/hash-enumerator-select
Hash#{select,select!} support return Enumerator
This commit is contained in:
@@ -494,6 +494,20 @@ assert 'Hash#each_value' do
|
||||
assert_equal [1,2], {a:1,b:2}.each_value.to_a.sort
|
||||
end
|
||||
|
||||
assert 'Hash#select' do
|
||||
h = {1=>2,3=>4,5=>6}
|
||||
hret = h.select.with_index {|a,b| a[1] == 4}
|
||||
assert_equal({3=>4}, hret)
|
||||
assert_equal({1=>2,3=>4,5=>6}, h)
|
||||
end
|
||||
|
||||
assert 'Hash#select!' do
|
||||
h = {1=>2,3=>4,5=>6}
|
||||
hret = h.select!.with_index {|a,b| a[1] == 4}
|
||||
assert_equal h, hret
|
||||
assert_equal({3=>4}, h)
|
||||
end
|
||||
|
||||
assert 'Range#each' do
|
||||
a = (1..5)
|
||||
b = a.each
|
||||
|
||||
+6
-2
@@ -162,10 +162,12 @@ class Hash
|
||||
|
||||
# 1.9 Hash#select! returns Hash; ISO says nothing.
|
||||
def select!(&b)
|
||||
return to_enum :select! unless block_given?
|
||||
|
||||
keys = []
|
||||
self.each_key{|k|
|
||||
v = self[k]
|
||||
unless b.call(k, v)
|
||||
unless b.call([k, v])
|
||||
keys.push(k)
|
||||
end
|
||||
}
|
||||
@@ -178,10 +180,12 @@ class Hash
|
||||
|
||||
# 1.9 Hash#select returns Hash; ISO says nothing.
|
||||
def select(&b)
|
||||
return to_enum :select unless block_given?
|
||||
|
||||
h = {}
|
||||
self.each_key{|k|
|
||||
v = self[k]
|
||||
if b.call(k, v)
|
||||
if b.call([k, v])
|
||||
h[k] = v
|
||||
end
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user