Использование рубинового хэша в качестве ограничения для выбора из большего хэша - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть хэш conditions:

{"age" => "52", "First_Name" => "Bat"}

И у меня есть массив person хешей:

[{"id"=>"1", "First_Name"=>"John", "Last_Name"=>"Doe", "Age"=>"27"}, {"id"=>"2", "First_Name"=>"Jane", "Last_Name"=>"Doe", "Age"=>"26"}, {"id"=>"3", "First_Name"=>"Bat", "Last_Name"=>"Man", "Age"=>"52"}, {"id"=>"4", "First_Name"=>"Bat", "Last_Name"=>"Woman", "Age"=>"51"}]

Как получить все хеши person, которые соответствуют conditions? (В этом случае он должен возвращать только хэш "Bat Man".)

1 Ответ

10 голосов
/ 25 февраля 2012

Если вы хотите получить всех людей, которые соответствуют conditions:

people.select do |person|
  conditions.all? { |k,v| person[k] == v }
end

Или, если вы уверены, что когда-либо будет только один (благодаря @tokland):

people.detect do |person|
  conditions.all? { |k,v| person[k] == v }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...