0

基本的に次のようなハッシュのハッシュが2つあります。

sales = { 
  "2013-03-15": {sales: 5}, 
  "2013-03-14": {sales: 3}, 
  "2013-03-12": {sales: 8},
  ... }

views = { 
  "2013-03-15": {views: 30}, 
  "2013-03-14": {views: 23}, 
  "2013-03-13": {views: 35}, 
  ... }

それらを次のような単一のハッシュにマージするにはどうすればよいですか。

data = { 
  "2013-03-15": {views: 30, sales: 5}, 
  "2013-03-14": {views: 23, sales: 3}, 
  "2013-03-13": {views: 35, sales: 0}, # or just {views: 35} 
  ... }

基本的に、キーとすべてのデータをそのままにしておく必要があります。

data = views.merge salesすべてのビュー データを上書きしているようで、基本的に売上ハッシュだけが残ります。

編集:販売またはビューのハッシュを単純なハッシュ (ハッシュのハッシュではない) に変換することもできますが、続行する良い方法はまだわかりません。

4

1 に答える 1

3

これ:

sales.merge(views) { |k, o, n| o.merge(n) }

実行可能な例:

views = {
  "2013-03-15" => {:views=> 30},
  "2013-03-14" => {:views=> 23},
  "2013-03-13" => {:views=> 35},
}

sales = {
  "2013-03-15" => {:sales=> 5},
  "2013-03-14" => {:sales=> 3},
  "2013-03-12" => {:sales=> 8},
}

puts sales.merge(views) { |k, o, n| o.merge(n) }
=> {"2013-03-15"=>{:sales=>5, :views=>30}, "2013-03-14"=>{:sales=>3, :views=>23}, "2013-03-12"=>{:sales=>8}, "2013-03-13"=>{:views=>35}}
于 2013-03-15T21:26:02.440 に答える