首页 > 解决方案 > 在 Ruby 2.6.3 中合并 2 个哈希并创建第三个新哈希

问题描述

我希望从以下两个哈希中创建一个新的哈希。

invoiced_data =
  {"Jan 2020"=>0, "Feb 2020"=>0, "Mar 2020"=>0, "Apr 2020"=>0,
   "May 2020"=>0, "Jun 2020"=>0, "Jul 2020"=>0.331027548e7,
   "Aug 2020"=>0.31668664e6, "Sep 2020"=>0, "Oct 2020"=>0,
   "Nov 2020"=>0, "Dec 2020"=>0}

payment_transaction_data =
  {"Jul 2020"=>400.0, "Aug 2020"=>26924.0}

后一个散列的所有键都是前一个散列的键。后一个哈希可能为空。

我希望构造的散列具有与invoiced_data. 这些键的值是带有键:Invoiced_data和的散列:payment_transaction_type。的值:Invoiced_datainvoiced_data给定键的值,而 的值:payment_transaction_type是给定键的值payment_transaction_data,如果键存在,否则为零。我需要的结果如下。

{"Jan 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "Feb 2020": {Invoiced_data: 0, payment_transaction_data: 0},         
 "Mar 2020": {Invoiced_data: 0, payment_transaction_data: 0},             
 "Apr 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "May 2020": {Invoiced_data: 0, payment_transaction_data: 0},         
 "Jun 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "Jul 2020": {Invoiced_data: 3310275.48, payment_transaction_data: 400.0},
 "Aug 2020": {Invoiced_data: 316686.64, payment_transaction_data: 26924.0},
 "Sep 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "Oct 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "Nov 2020": {Invoiced_data: 0, payment_transaction_data: 0},        
 "Dec 2020": {Invoiced_data: 0, payment_transaction_data: 0}}     

标签: ruby-on-railsrubyhashmerge

解决方案


我很确定它可能会更优化,但更快的解决方案:

a
=> {"Jan 2020"=>0, "Feb 2020"=>0, "Mar 2020"=>0, "Apr 2020"=>0, "May 2020"=>0, "Jun 2020"=>0, "Jul 2020"=>3310275.48, "Aug 2020"=>316686.64, "Sep 2020"=>0, "Oct 2020"=>0, "Nov 2020"=>0, "Dec 2020"=>0}

b
=> {"Jul 2020"=>400.0, "Aug 2020"=>26924.0}

a.map do |k, v|
  [k, { Invoiced_data: v || 0, payment_transaction_data: b[k] || 0 }]
end.to_h
=> {"Jan 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Feb 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Mar 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Apr 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "May 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Jun 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Jul 2020"=>{:Invoiced_data=>3310275.48, :payment_transaction_data=>400.0}, "Aug 2020"=>{:Invoiced_data=>316686.64, :payment_transaction_data=>26924.0}, "Sep 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Oct 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Nov 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}, "Dec 2020"=>{:Invoiced_data=>0, :payment_transaction_data=>0}}

推荐阅读