我有一系列哈希:
[{ 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
这不符合预期。删除那些有害物品的最“红宝石”方式是什么?
答案 0 :(得分:3)
group_by{ |item| [item.relationship_1, item.value] }.values.map(&:first)
?
<强>更新强>
哎呀,这是一个哈希:
group_by{ |item| [item[:relationship_1], item[:value]] }.values.map(&:first)
或
group_by{ |item| item.values_at(:relationship_1, :value) }.values.map(&:first)
答案 1 :(得分:3)
不幸的是,Ruby核心中没有uniq_by
。使用require 'activesupport'
将其拉入。
items.uniq_by {|h| [h[:replationship_1], h[:value]] }
编辑:如下面@mu所述,Ruby 1.9的uniq
也有效:
items.uniq{|h| [h[:replationship_1], h[:value]] }
答案 2 :(得分:1)