红宝石:使用哈希数组从哈希的另一个阵列

问题描述:

说我有散列值的两个数组中选择值:红宝石:使用哈希数组从哈希的另一个阵列

array_1 = [{name: "Dale Cooper", role: "author"}, 
      {name: "Lucy Moran", role: "author"}, 
      {name: "Harry Truman", role: "author"}] 

array_2 = [{author: "Lucy Moran", title: "Lorem"}, 
      {author: "Bobby Briggs", title: "Ipsum"}, 
      {author: "Harry Truman", title: "Dolor"}] 

我怎么会去从作者是在array_1array_2只是哈希选择?最好,其结果必然是这样的:

array_3 = [{author: "Lucy Moran", title: "Lorem"}, 
      {author: "Harry Truman", title: "Dolor"}] 
+4

你尝试过这么远吗? – jeffdill2

+0

请阅读“[问]”,包括链接页面,“[mcve]”和“[Stack Overflow用户需要多少研究工作?](http://meta.*.com/questions/261592)”。我们希望看到你的努力的证据。你尝试了什么?你搜索并没有找到任何东西?你有没有找到东西,但它没有帮助?你有没有尝试写代码?如果不是,为什么?如果是这样,那么最小的代码示例显示了您尝试的内容以及它为什么不起作用?没有它,看起来你没有尝试并希望我们为你写信。 –

您可以将所有在一组array_1名保存,以便选择从array_2哈希:

require 'set' 

array_1 = [{ name: 'Dale Cooper', role: 'author' }, 
      { name: 'Lucy Moran', role: 'author' }, 
      { name: 'Harry Truman', role: 'author' }] 

array_2 = [{ author: 'Lucy Moran', title: 'Lorem' }, 
      { author: 'Bobby Briggs', title: 'Ipsum' }, 
      { author: 'Harry Truman', title: 'Dolor' }] 

authors = Set.new(array_1.map{ |h| h[:name] }) 

array_3 = array_2.select{ |h| authors.include?(h[:author]) } 
# [{:author=>"Lucy Moran", :title=>"Lorem"}, 
# {:author=>"Harry Truman", :title=>"Dolor"}]