簡體   English   中英

如何將哈希數組排序為具有多個鍵值的哈希值?

[英]How to sort an array of hashes into hashes with multiple values for a key?

我正在使用rails4處理Ruby on Rails項目。

場景:

我有一系列哈希。 數組包含鍵相同的哈希值。

 a = [{132=>[1000.0]}, {132=>[4000.0]}, {175=>[1000.0]}, {175=>[1000.0]}, {133=>[1200.0]}]
 h = a.each {|key,value| key.each {|k| value}}
#{132=>[1000.0]}
#{132=>[4000.0]}
#{175=>[1000.0]}
#{175=>[1000.0]}
#{133=>[1200.0]}

問題:

如何擺脫重復鍵,但將值添加到唯一鍵,如下所示:

 {132=>[1000,4000]}
 {175=>[1000,1000]}
 {133=>[1200]}

謝謝。

那會這樣做:

a.inject({}) {|sum, hash| sum.merge(hash) {|_, old, new| old + new }}

這對我有用:

p a.each_with_object(Hash.new([])) { |e, h| e.each { |k, v| h[k] += v } }

# => {132=>[1000.0, 4000.0], 175=>[1000.0, 1000.0], 133=>[1200.0]}

其他方式:

a.each_with_object({}) do |g,h|
  k, v = g.to_a.flatten
  (h[k] ||= []) << v
end
  #=> {132=>[1000.0, 4000.0], 175=>[1000.0, 1000.0], 133=>[1200.0]}

要么

a.each_with_object(Hash.new { |h,k| h[k]=[] }) do |g,h|
  k, v = g.to_a.flatten
  h[k] << v
end
  #=> {132=>[1000.0, 4000.0], 175=>[1000.0, 1000.0], 133=>[1200.0]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM