【问题标题】:How do I remove duplicate attributes from an array based on fields of the objects in the array?如何根据数组中对象的字段从数组中删除重复属性?
【发布时间】:2017-02-13 21:56:07
【问题描述】:

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

name
member_id

我希望扫描我的数组并消除重复项,也就是说,字段“name”和“member_id”已经与数组中的其他内容匹配的项。我该怎么做呢?我意识到我可以通过使用来检查数组是否已经包含一个项目

results.any?{|a| a.name.eql?(name) && a.member_id == member_id}

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

【问题讨论】:

标签: arrays ruby duplicates field


【解决方案1】:

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]]

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 2014-03-08
    • 1970-01-01
    • 2021-06-03
    • 2016-11-08
    • 2018-03-06
    • 2021-06-18
    • 2020-06-29
    • 2019-01-14
    相关资源
    最近更新 更多