2016-03-05 2 views
-5

Я хочу передать хэш:Как фильтровать массив объектов на основе хеша условий в 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) 

Как я могу это сделать? Может быть, я ошибаюсь, и есть еще один способ решить эту проблему?

+0

Это действительно непонятно, что вы пытаетесь спросить ... –

+0

ли параметр массива массив объектов, имеют соответствующие методы (возраст, вес, высота, зарплата), и вы хотите вернуть фильтрованный массив из тех, которые идеально соответствуют вашему хеш-фильтру. –

+0

Название и вопрос не совпадают. – sawa

ответ

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 
+0

Да, спасибо. Я только что протестировал, и он работает! Извините за мой плохой английский и рубин) –

Смежные вопросы