从基于数组的散列中排除元素

时间:2015-08-20 10:28:14

标签: ruby

我有一系列哈希

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

和字符串数组

y = ["a", "c"]

如何根据xy中排除元素?所以最后我有x = [ {:name=>'b', :value=2} ]

2 个答案:

答案 0 :(得分:4)

使用Enumerable#reject

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

注意:如果要修改原始对象,可以改用reject!

答案 1 :(得分:1)

虽然@Santhosh提供的答案是绝对正确的,但是在大型数组上,由于在每次迭代中在y中进行查找,因此效率不高。那可能会更快:

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