我正在尝试重新创建#select
方法。到目前为止,我有数组部分工作,但当我尝试在哈希上调用#my_select
时,我得到一个空哈希。
仅供参考,首先,我必须重新创建自己的`#each'方法。就是这样。
module Enumerable
def my_each
i = 0
while i < self.size
yield(self[i])
i += 1
end
self
end
现在,这是我创建的#my_select
方法:
def my_select
if self.instance_of?(Array)
ret = []
self.my_each do |item|
ret << item if yield(item)
end
ret
elsif self.instance_of?(Hash)
ret = {}
self.my_each do |key, value|
if yield(key,value)
ret[key] = value
end
end
ret
end
end
end
...我的输入/输出......
> h = { "a" => 100, "b" => 200, "c" => 300 }
> h.select { |k,v| k == "a"}
=> {"a"=>100}
> h.my_select { |k,v| k == "a"}
=> {}
答案 0 :(得分:2)
也许您可以更改my_each
以处理Hash
?
def my_each
if self.instance_of?(Array)
i = 0
while i < self.size
yield(self[i])
i += 1
end
self
elsif self.instance_of?(Hash)
i = 0
arr = self.to_a
while i < arr.size
yield(arr[i][0], arr[i][1])
i += 1
end
self
end
end