我有一个数组数组,其中也包含散列值,并且该数组具有我想要删除的重复数组。下面是一个例子:
[[“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/