2015-08-20 31 views
1

我有散列排除基於從散元素在陣列

x = [{:name=>'a', :value=1}, {:name=>'b', :value=2}, {:name=>'c', :value=3}] 

數組和字符串數組從x

y = ["a", "c"] 

我怎麼能排除元素基於y?所以在最後我有x = [ {:name=>'b', :value=2} ]

回答

4

使用Enumerable#reject

x.reject {|h| y.include? h[:name]} 
# => [{:name=>"b", :value=>2}] 

注意:如果要修改原來的對象,你可以使用reject!代替。

1

雖然@Santhosh提供的答案是絕對正確的,但在巨大的陣列上,由於在每次迭代中都在y中進行查找,效率不高。這可能會更快:

xgr = x.group_by { |e| e[:name] } 
x - y.map { |e| xgr[e] }.flatten 
#⇒ [ {:name=>'b', :value=2} ]