如何根据数组中对象的字段从数组中删除重复的属性?

时间:2017-02-13 21:56:08

标签: arrays ruby duplicates field

我正在使用Rails 5和Ruby 2.4我有一个对象数组,每个对象都有字段

name
member_id

我希望扫描我的数组并删除重复的项目,taht is,其字段“name”和“member_id”已经匹配teh数组中的其他项目。我该怎么做呢?我意识到我可以使用

检查数组是否已经包含一个项目
results.any?{|a| a.name.eql?(name) && a.member_id == member_id}

但我不确定如何使用上述方法来消除重复。此外,如果有重复项,我仍然希望保留其中一个具有唯一名称/ member_id组合的项目。

1 个答案:

答案 0 :(得分:0)

Ruby的uniq是一个选项。例如,假设我想比较下面的子数组元素在子索引0和2处的值。我可以创建一个由这些项组成的比较对象,并将其与uniq的块选项一起使用:

a = [
  ['one', 1, 1],
  ['two', 2, 2],
  ['one', 2, 1],
  ['two', 2, 2],
  ['one', 1, 2],
]

p a.uniq { |elt| [elt[0], elt[2]] }  # => [["one", 1, 1], ["two", 2, 2], ["one", 1, 2]]