使用键和值比较两个哈希-Ruby

使用键和值比较两个哈希-Ruby,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,我的问题与本文中提出的问题相同,只是针对Ruby而不是Perl。 我想比较两个散列,首先看看它们是否存在于第一个散列中的键,是否存在于第二个散列中,如果存在,则比较值并打印散列键的值,否则如果值不相等,则打印具有不相等值的键 我看了很多建议,但找不到比较两个不同哈希值的答案 h1 = {"a" => 1, "b" => 2, "c" => 3} h2 = {"a" => 2, "b" => 2, "d" => 3} (h1.keys & h2.ke

我的问题与本文中提出的问题相同,只是针对Ruby而不是Perl。

我想比较两个散列,首先看看它们是否存在于第一个散列中的键,是否存在于第二个散列中,如果存在,则比较值并打印散列键的值,否则如果值不相等,则打印具有不相等值的键

我看了很多建议,但找不到比较两个不同哈希值的答案

h1 = {"a" => 1, "b" => 2, "c" => 3}
h2 = {"a" => 2, "b" => 2, "d" => 3}

(h1.keys & h2.keys).each {|k| puts ( h1[k] == h2[k] ? h1[k] : k ) }
输出:

a
2

要查找“客户端”和“事件”数组中显示的所有人员,我将收集这些值,然后进行比较:

clients = {"address"=>"street.name.1" , "name"=>"john.doe" , "age"=>25} , {"address"=>"street.name2" , "name"=>"jane.doe" , "age"=>14} , {"address"=>"street.name.3" , "name"=>"tom.smith" , "age"=>35}
events = {"type"=>"party" , "participant"=>"lisa.cohen" , "date"=>"05.05.13"} , {"type"=>"corporate" , "participant"=>"john.doe" , "date"=>"26.05.13"} , {"type"=>"meeting" , "participant"=>"james.edwards" , "date"=>"14.05.13"}

#Get all client names
client_names = clients.collect{ |c| c['name'] }
p client_names
#=> ["john.doe", "jane.doe", "tom.smith"]

#Get all participant names
event_participants = events.collect{ |e| e['participant'] }
p event_participants
#=> ["lisa.cohen", "john.doe", "james.edwards"]

#Determine names that appear in both
names_in_both = client_names & event_participants
p names_in_both
#=> ["john.doe"]

我相信我可能需要澄清,因为我似乎无法得到有效的答案。我有两个类似的哈希:客户={“地址”=>“街道.名称.1”,“姓名”=>“约翰.多伊”,“年龄”=>25},{“地址”=>“街道.名称2”,“姓名”=>“简.多伊”,“年龄”=>14},{“地址”=>“街道.名称.3”,“姓名”=>“汤姆.史密斯”,“年龄”=>35}事件={“类型”=>“party”,“participant”=>“lisa.cohen”,“date”=>“05.05.13”},{“type”=>“corporate”,“participant”=>“john.doe”,“date”=>“26.05.13”},{“type”=>“meeting”,“participant”=>“james.edwards”,“date”=>“14.05.13”}因此,如果我要比较两者是否都显示了任何人,我需要比较客户[“name”]使用事件[“参与者”]然后显示这些匹配项?您应该编辑问题以添加这些详细信息,而不是将其作为注释添加。这使它更容易阅读。回答得好。它也可以简化为一行:
clients.map{cl}cl['name']}&events.map{ev}ev['participant']}
这是最好、最简单的答案。