ruby - 从数组中删除相似的对象

标签 ruby arrays

我有一个哈希数组:

[{ 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_1value 的行。我能想到的唯一方法是:

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

这没有按预期工作。删除那些有问题的项目的最“Ruby”方法是什么?

最佳答案

不幸的是,uniq_by在 Ruby 核心中不可用。使用 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/

相关文章:

arrays - 如何对结构数组进行排序

c - 从 C 函数返回数组

ruby-on-rails - 议程日历/花名册 View

ruby - 删除hadoop上超过x天的文件

ruby - 添加 View ,然后在 Rails 中正确路由它

c - 字符串数组随机排序

javascript - 数组的复杂问题

javascript - typescript 如何将新项目添加到空对象数组

ruby - 在 Ruby 中,你如何将数字向下舍入到 2 位有效数字

ruby - 有条件地设置 CSS 类