我有像这样的散列哈希:
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"}}
关于哈希的哈希排序有很多问题,我一直试图解决这个问题,但我不知道如何实现这一目标。
答案 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