使用ID数组将哈希数组相交

时间:2011-10-19 21:16:33

标签: ruby-on-rails ruby

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

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

2 个答案:

答案 0 :(得分:2)

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}]

答案 1 :(得分: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

或使用select:

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

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

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