如何基于Ruby中的条件散列过滤对象数组?

时间:2016-03-05 08:23:15

标签: ruby

我想传递哈希:

filter_search = {age: 20, weight: 30, height: 30, salary: (100000..200000)}

到方法

def search(array, filter)
  array.select do |elem|
     ???????
  end
end

filtered_array = search(some_array, filter_search)

我该怎么做?也许我以错误的方式思考,还有另一种模式可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

假设数组参数是一个具有适当方法(年龄,体重,身高,工资)的对象数组,并且您希望返回与您的哈希过滤器完全匹配的过滤数组,这样的事情可能会起作用。

def search(array, filter)
  array.select do |elem|
    filter.all? do |key, value|
      elem.send(key) == value
    end
  end
end

如果数组中有哈希而不是对象,则使用:

def search(array, filter)
  array.select do |elem|
    filter.all? do |key, value|
      elem[key] == value
    end
  end
end