我有一组散列:
[{ item_id: 1, relationship_1: 1, relationship_2: 1, value: 'go' },
{ item_id: 2, relationship_1: 2, relationship_2: 2, value: 'stop' },
{ item_id: 3, relationship_1: 2, relationship_2: 1, value: 'stop' }, #remove
{ item_id: 4, relationship_1: 3, relationship_2: 1, value: 'go' },
{ item_id: 5, relationship_1: 1, relationship_2: 2, value: 'go' }] #remove
我要删除评论的行。需要删除所有具有共同的
relationship_1
和value
的行。我唯一能想到的是:items.each do |i|
items.each do |k|
if i.item_id != k.item_id and i.relationship_1 == k.relationship_1 and i.value == k.value
items.remove(k)
end
end
end
这并没有达到预期的效果。什么是最“红宝石”的方式来删除这些违规项目?
最佳答案
不幸的是,uniq_by
在ruby core中不可用。使用require 'activesupport'
将其拉入。
items.uniq_by {|h| [h[:replationship_1], h[:value]] }
编辑:如下@mu所述,ruby 1.9的
uniq
也可以工作:items.uniq{|h| [h[:replationship_1], h[:value]] }
关于ruby - 从数组中删除类似的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9689353/