ruby - 如何根据嵌套值从数组数组中删除重复条目?

标签 ruby

我有一个数组数组,其中也包含散列值,并且该数组具有我想要删除的重复数组。下面是一个例子:

[[“John, Doe“, "/manager/consumer/123456?status=1", {:data=>{:id=>123456},  :class=>""}],
[“Jane, smith“, "/manager/consumer/7891011?status=1", {:data=>{:id=>7891011},  :class=>""}],
[“William, Smith”, "/manager/consumer/12131415?status=1", {:data=>{:id=>1211415}, :class=>""}],
[“John, Doe“, "/manager/consumer/123456?status=1", {:data=>{:id=>123456}, :class=>""}]]

正如我们所看到的,有两个相同的数组(第一个和最后一个),我想根据数组内散列中存在的 :id 删除重复的数组?

最佳答案

使用uniq方法! ( ruby >= 1.9.2)

array = [
  ["John, Doe", "/manager/consumer/123456?status=1", {:data=>{:id=>123456},  :class=>""}],
  ["Jane, smith", "/manager/consumer/7891011?status=1", {:data=>{:id=>7891011},  :class=>""}],
  ["William, Smith", "/manager/consumer/12131415?status=1", {:data=>{:id=>1211415}, :class=>""}],
  ["John, Doe", "/manager/consumer/123456?status=1", {:data=>{:id=>123456}, :class=>""}]
]

array.uniq { |_name, _url, hash| hash[:data][:id] }

如果 id 重复,它将删除除第一个条目以外的所有条目,因此您需要考虑 id 相同但其余数据不同的情况。

注意:如果您出于某种原因在 1.9.2 之前的 ruby​​ 上运行,则 uniq 将忽略该 block 。出于这个原因,ActiveSupport 有 uniq_by 方法(在 4.0.2 版中被删除)。

关于ruby - 如何根据嵌套值从数组数组中删除重复条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70606013/

相关文章:

c - Ruby C 扩展,加载外部库

ruby-on-rails - Rails created_at 查找条件

ruby - Chronic Rubygem 在我给它指定日期时返回中午 12 点,为什么不是 0 :00?

ruby - 使用正则表达式在 Ruby 中查找精确的模式匹配

ruby - 如何在 ruby​​ 中显示没有祖先方法的类的所有方法?

python - 用 Python/Ruby 模拟 C 预处理器?

ruby - 我应该实现什么才能使自定义类的行为与数组完全一样?

ruby - Flutter pod 安装问题 - #<Dir :0x00007fa6f7e2ec80> 的未定义方法 `each_child'

ruby - 错误 : Gem bundler is not installed, 首先运行 `gem install bundler`

ruby-on-rails - RoR - 第一个 App 项目,路由到主视图而不是/blog_entries