如何重新创建.select()?

时间:2014-01-30 04:19:21

标签: ruby select

我正在尝试重新创建#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"}
=> {}

1 个答案:

答案 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