【问题标题】:Comparing two hashes with the keys and values - Ruby将两个哈希与键和值进行比较 - Ruby
【发布时间】:2013-03-19 15:02:33
【问题描述】:

我的问题与本文中提出的问题相同,但针对的是 Ruby 而不是 Perl。 Comparing-two-hashes-with-the-keys-and-values - Perl

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

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

【问题讨论】:

  • 我相信我可能需要澄清一下,因为我似乎无法获得有效工作的给定答案。
  • 我有两个类似这样的哈希: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}
  • 事件 = {"type"=>"party" , "participant"=>"lisa.cohen" , "date"=>"05.05.13"} , {"type"=>"公司”,“参与者”=>“john.doe”,“日期”=>“26.05.13”},{“类型”=>“会议”,“参与者”=>“james.edwards”,“日期” =>“14.05.13”}
  • 因此,如果我要比较两者以查找是否有任何人显示在两者中,我需要将 client["name"] 与 events["participant'] 进行比较,然后显示那些比赛?
  • 您应该编辑问题以添加这些详细信息,而不是将它们添加为 cmets。它使阅读更容易。

标签: ruby ruby-on-rails-3.2


【解决方案1】:
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

【讨论】:

  • 这是最好最简单的答案。
【解决方案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"]

【讨论】:

  • 好答案。也可以简化为一行:clients.map{|cl| cl['name']} & events.map{|ev| ev['participant']}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2019-09-24
  • 2019-03-03
  • 2018-06-28
相关资源
最近更新 更多