如何去除基於鍵的重複項?如何從基於鍵的散列數組中刪除重複項?
values = [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}]
我怎麼能忽略的價值和基於關鍵運行uniq
使其返回:
[{'a' => '1'}, {'b' => '1'}]
如何去除基於鍵的重複項?如何從基於鍵的散列數組中刪除重複項?
values = [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}]
我怎麼能忽略的價值和基於關鍵運行uniq
使其返回:
[{'a' => '1'}, {'b' => '1'}]
假設你不關心它的值被打一頓,只是運行它們到一個哈希(它確實有唯一的鑰匙,因此可能是這種情況下合適的收集類別):
h = {}
values.each{|i|i.each{|k,v|h[k] = v}}
puts h # => {"a"=>"4", "b"=>"1"}
...或者如果您想要第一個如果你想回到陣
h = {}
values.each{|i|i.each{|k,v|h[k] = v unless h[k]}}
:每個按鍵的
h.each{|k,v|a << {k=>v}}
下面的工作只能在Ruby 1.9的,所以它可能是無用的。
Hash[values.map(&:first).reverse].map{|a| Hash[*a]}
如果你需要在原來的順序,
values & Hash[values.map(&:first).reverse].map{|a| Hash[*a]}
不會引入任何中間變量以下1個襯墊會做的伎倆:
> [{"a"=>"1"}, {"a"=>"2"}, {"b"=>"1"}, {"a"=>"4"}].inject({}) {|s,h| s.merge(h) unless s.keys.include? h.keys}.inject([]) {|s,h| s << {h[0]=>h[1]}}
=> [{"a"=>"4"}, {"b"=>"1"}]
@sawa運行1.8.7我** irb **接受他們就好了,但我更新了帖子,以減少混淆。 – Marco 2011-04-27 00:27:07
好的,對不起。你的猜測是對的。我正在使用ruby1.9.2。 – sawa 2011-04-27 00:43:12