使用ID数组交叉哈希数组

我有一系列哈希,这不是一个活跃的记录模型。 此数组是Person类型的对象,具有idnameage属性。 我有第二个字符串数组, ["john", "james", "bill"]

我试图删除散列数组中的所有对象,除了在第二个数组中有名字的那些,基本上执行交叉,但我遇到了很多问题。 有什么建议? 我不确定我的语法是否关闭或者我是否以错误的方式思考这个问题。 显然我可以迭代,但这似乎可能不是处理这种情况的最佳方式。

http://www.ruby-doc.org/core-1.9.2/Array.html#method-i-select

 arr1 = [{:id => 1, :name => "John"}, {:id => 2, :name => "Doe"}]; arr2 = ["Doe"]; intersect = arr1.select {|o| arr2.include? o[:name]} # you can also use select! p intersect # outputs [{:name=>"Doe", :id=>2}] 

晚到派对,但如果arr1:name是一个数组,这很好用:

 arr1 = [{:id => 1, :name => ["John", "Doe"]}, {:id => 2, :name => ["Doe"]}]; arr2 = ["Doe"] > intersect = arr1.reject{|o| (arr2 & o[:name]).empty?} => [{:id=>1, :name=>["John", "Doe"]}, {:id=>2, :name=>["Doe"]}] #output > arr2 = ["John"] > intersect = arr1.reject{|o| (arr2 & o[:name]).empty?} => [{:id=>1, :name=>["John", "Doe"]}] #output 

或使用选择:

 intersect = arr1.select{|o| !(arr2 & o[:name]).empty?} 

要删除哈希数组中除第二个数组中具有名称的哈希数组中的所有对象,您可以执行以下操作:

 arr1.reject!{|o| (arr2 & o[:name]).empty?}