使用ruby散列作为从较大散列中进行选择的约束

use*_*154 2 ruby hash

我有一个哈希conditions:

{"age" => "52", "First_Name" => "Bat"}
Run Code Online (Sandbox Code Playgroud)

我有一系列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"}]
Run Code Online (Sandbox Code Playgroud)

如何获得person匹配的所有哈希值conditions?(在这种情况下,它应该只返回"蝙蝠侠"哈希.)

Ale*_*x D 10

如果你想得到所有匹配的人conditions:

people.select do |person|
  conditions.all? { |k,v| person[k] == v }
end
Run Code Online (Sandbox Code Playgroud)

或者,如果你确定只有一个(感谢@tokland):

people.detect do |person|
  conditions.all? { |k,v| person[k] == v }
end
Run Code Online (Sandbox Code Playgroud)