我正在尝试在后续 json 上调用 uniq 方法,这样它只会返回基于 employee_id 的唯一结果
# Json array
a ={
results: [
{
employee: {
name: "A",
employee_id: "A-00016",
title: 1
}
},{
employee: {
name: "A",
employee_id: "A-00016",
title: 2
}
},{
employee: {
name: "C",
employee_id: "C-00017",
title: 3
}
}
]
}
# Calling uniq on a
a.uniq { |p| p.values_at(:employee_id) }
但是,我只得到这个结果
{
results: [
{
employee: {
name: "A",
employee_id: "A-00016",
title: 1
}
}
]
}
而不是我想要的
{
results: [
{
employee: {
name: "A",
employee_id: "A-00016",
title: 1
},{
employee: {
name: "C",
employee_id: "C-00017",
title: 3
}
}
]
}
我是否使用了正确的方法来输出我想要的结果?
最佳答案
使用uniq
:
input[:results].uniq { |e| e[:employee][:employee_id] }
#⇒ [
# {:employee=>{:name=>"A", :employee_id=>"A-00016", :title=>"1"}},
# {:employee=>{:name=>"C", :employee_id=>"C-00017", :title=>"3"}}]
但我认为应该有一些条件适用于从具有相同 id
的 sibling 中选择什么。下面的代码选择了一个具有最大 title
值的代码:
input[:results].group_by { |e| e[:employee][:employee_id] }
.map { |_, v| v.max_by { |e| e[:employee][:title].to_i } }
#⇒ [
# {:employee=>{:name=>"A", :employee_id=>"A-00016", :title=>"2"}},
# {:employee=>{:name=>"C", :employee_id=>"C-00017", :title=>"3"}}]
关于ruby-on-rails - 如何在嵌套数组/哈希上使用 ruby uniq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078785/