ruby-on-rails - 如何在嵌套数组/哈希上使用 ruby​​ uniq

标签 ruby-on-rails arrays ruby json hash

我正在尝试在后续 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/

相关文章:

ruby-on-rails - 根据上下文自定义验证错误消息

ruby-on-rails - 更新到 Rails 3.2.2 : How to properly move my plugin from the '/vendor' to '/lib' directory?

ruby-on-rails - rails : Button Group with button_to

ruby-on-rails - Rails 中的 mime 类型是怎么回事?

javascript - Push Function To Array 将数组转换为数字

c++ - C++中的双指针数组

arrays - 如何在 Python 3 中转置数组?

Ruby - Spaceship 运算符不会在 .sort 的 block 中工作

ruby-on-rails - 如何使用 Ruby 调用使用 SSH 和 SCP 传输文件?

ruby-on-rails - 我如何设计/omniauth 重定向到我登录的页面?