比较带有键和值的两个哈希表 - Ruby

8
我有一个和这篇帖子类似的问题,但是针对的是Ruby而不是Perl。
我想比较两个哈希表,首先查看第一个哈希表中的键是否存在于第二个哈希表中,如果存在则比较值并打印哈希表键的值。否则,如果值不相等,则打印具有不相等值的键。
我查看了许多建议,但找不到比较两个不同哈希表值的答案。请参考以下链接:Comparing-two-hashes-with-the-keys-and-values - Perl

我相信我需要澄清一下,因为似乎无法有效地得到给定的答案。 - stephiepea
我有两个类似于以下的哈希表: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} - stephiepea
事件 = {"类型" => "聚会", "参与者" => "lisa.cohen", "日期" => "05.05.13"}, {"类型" => "企业", "参与者" => "john.doe", "日期" => "26.05.13"}, {"类型" => "会议", "参与者" => "james.edwards", "日期" => "14.05.13"} - stephiepea
因此,如果我要比较这两个以查找是否有任何人同时显示在两个中,我需要将client["name"]与events["participant"]进行比较,然后显示这些匹配项? - stephiepea
2
你应该编辑问题并添加这些细节,而不是将它们作为评论添加。这样做会使阅读变得更加容易。 - Justin Ko
2个回答

12
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

这是最好且最简单的答案。 - newUserNameHere

8
为了找到在客户端和事件数组中都显示的所有人员,我会收集这些值然后进行比较:
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"]

3
好的回答。它可以简化为一行代码:clients.map{|cl| cl['name']} & events.map{|ev| ev['participant']} - sfstewman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接