ruby基于不同键

时间:2017-02-20 23:02:49

标签: ruby-on-rails ruby hash

我有像这样的散列哈希:

authors = {"7"=> {"id"=>"60"} , "0"=> {"id"=>"60"} , "1"=> {"id"=>"99"}, "8"=> {"id"=>"99"}, "15"=> {"id"=>"19"} }

我想合并每个散列,其中散列的散列的id重复(或者使用相同的散列ID散列删除每个第二个散列)。

在这种情况下,我想以

结束
authors = {"7"=> {"id"=>"60"} , "1"=> {"id"=>"99"}, "15"=> {"id"=>"19"}}

关于哈希的哈希排序有很多问题,我一直试图解决这个问题,但我不知道如何实现这一目标。

2 个答案:

答案 0 :(得分:4)

试试这个

authors.to_a.uniq { |item| item.last["id"] }.to_h
 => {"7"=>{"id"=>"60"}, "1"=>{"id"=>"99"}, "15"=>{"id"=>"19"}} 
带有块的

uniq方法可以完成工作

答案 1 :(得分:4)

以下是两种方式。

<强>#1

require 'set'

st = Set.new
authors.select { |_,v| st.add?(v) } 
  #=> {"7"=>{"id"=>"60"}, "1"=>{"id"=>"99"}, "15"=>{"id"=>"19"}} 

<强>#2

authors.reverse_each.with_object({}) { |(k,v),h| h[v] = k }.
  reverse_each.with_object({}) { |(k,v),h| h[v] = [k] }
  #=> {"7"=>[{"id"=>"60"}], "1"=>[{"id"=>"99"}], "15"=>[{"id"=>"19"}]}

authors.reverse_each.to_h.invert.invert.reverse_each.to_h