Arrays 以不同的方式合并三个哈希数组

Arrays 以不同的方式合并三个哈希数组,arrays,ruby-on-rails,ruby,ruby-on-rails-3,hash,Arrays,Ruby On Rails,Ruby,Ruby On Rails 3,Hash,我是Ruby新手,正在尝试构建一个会议应用程序。我有三个包含哈希的数组: 一个包含有日期的预定会议,因此是空数组 人的 一个包含每次会议邀请的人员 最后一个是拒绝的人 这具体表现为: meetings = [ {:id=>"1", :peoples=>[]} {:id=>"2", :peoples=>[]} {:id=>"3", :peoples=>[]} ] invited_peoples = [ {:id=>"1", :peoples=

我是Ruby新手,正在尝试构建一个会议应用程序。我有三个包含哈希的数组:

  • 一个包含有日期的预定会议,因此是空数组 人的
  • 一个包含每次会议邀请的人员
  • 最后一个是拒绝的人
这具体表现为:

meetings = [
 {:id=>"1", :peoples=>[]}
 {:id=>"2", :peoples=>[]}
 {:id=>"3", :peoples=>[]}
]

invited_peoples = [
 {:id=>"1", :peoples=>['Tom', 'Henry', 'Georges', 'Nicolas']}
 {:id=>"2", :peoples=>['Arthur', 'Carl']}
]

absent_peoples = [
 {:id=>"1", :peoples=>['Henry', 'Georges']}
]
我希望有:会议+邀请的人-缺席的人喜欢

meetings_with_participants = [
 {:id=>"1", :peoples=>['Tom', 'Nicolas']}
 {:id=>"2", :peoples=>['Arthur', 'Carl']}
 {:id=>"3", :peoples=>[]}
]
我正在寻找一个可读的解决方案,但我没有找到任何人

对不起,我的英语不好,先谢谢你,
尼古拉斯创建一个简单的散列

h = meetings.each_with_object({}) { |g,h| h[g[:id]] = g[:peoples] }
  #=> {"1"=>[], "2"=>[], "3"=>[]}
添加被邀请者

invited_peoples.each { |g| h[g[:id]] += g[:peoples] }
absent_peoples.each { |g| h[g[:id]] -= g[:peoples] }          
h.map { |k,v| { :id=> k, :peoples=> v } }
  #=> [{:id=>"1", :peoples=>["Tom", "Nicolas"]},
  #    {:id=>"2", :peoples=>["Arthur", "Carl"]},
  #    {:id=>"3", :peoples=>[]}] 
现在

删除下线

invited_peoples.each { |g| h[g[:id]] += g[:peoples] }
absent_peoples.each { |g| h[g[:id]] -= g[:peoples] }          
h.map { |k,v| { :id=> k, :peoples=> v } }
  #=> [{:id=>"1", :peoples=>["Tom", "Nicolas"]},
  #    {:id=>"2", :peoples=>["Arthur", "Carl"]},
  #    {:id=>"3", :peoples=>[]}] 
现在

将哈希转换为哈希数组

invited_peoples.each { |g| h[g[:id]] += g[:peoples] }
absent_peoples.each { |g| h[g[:id]] -= g[:peoples] }          
h.map { |k,v| { :id=> k, :peoples=> v } }
  #=> [{:id=>"1", :peoples=>["Tom", "Nicolas"]},
  #    {:id=>"2", :peoples=>["Arthur", "Carl"]},
  #    {:id=>"3", :peoples=>[]}] 
我最初创建了一个散列,只有在处理了被邀请者和拒绝者之后,我才将其转换为一个散列数组。这样做可以加速添加和删除人员的查找。因此,如果
n=meetings.size
,这些计算的计算复杂度接近O(n),“接近”,因为哈希键查找的计算复杂度接近O(1)(即,无论哈希大小如何,查找键及其值所需的时间几乎是恒定的)。相比之下,在
邀请的人
缺席的人
中为
会议
的每个元素搜索
:id
值的方法的计算复杂度为O(n2)。

定义了通过id查找对象的方法 使用map打开一个新的数组,在map块内只需使用您的逻辑
会议+邀请的人-缺席的人,如
结果:
你试了什么?