【发布时间】:2015-11-13 22:47:20
【问题描述】:
我有一个哈希数组
x = [{:name=>'a', :value=1}, {:name=>'b', :value=2}, {:name=>'c', :value=3}]
和字符串数组
y = ["a", "c"]
如何根据 y 从 x 中排除元素?所以最后我有x = [ {:name=>'b', :value=2} ]
【问题讨论】:
标签: ruby
我有一个哈希数组
x = [{:name=>'a', :value=1}, {:name=>'b', :value=2}, {:name=>'c', :value=3}]
和字符串数组
y = ["a", "c"]
如何根据 y 从 x 中排除元素?所以最后我有x = [ {:name=>'b', :value=2} ]
【问题讨论】:
标签: ruby
x.reject {|h| y.include? h[:name]}
# => [{:name=>"b", :value=>2}]
注意:如果要修改原始对象,可以改用reject!。
【讨论】:
虽然@Santhosh 提供的答案是绝对正确的,但在巨大的数组上它效率不高,因为每次迭代都在y 中查找。这可能会更快:
xgr = x.group_by { |e| e[:name] }
x - y.map { |e| xgr[e] }.flatten
#⇒ [ {:name=>'b', :value=2} ]
【讨论】: