You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 2.6.3中合并两个Hash生成指定结构新Hash的需求

合并两个Ruby Hash生成嵌套结构的新Hash

这里有个简洁的方案来实现你想要的效果,利用Ruby的each_with_object和Hash#fetch方法,完美覆盖所有场景(包括payment_transaction_data为空的情况):

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}

# 生成目标Hash
combined_data = invoiced_data.each_with_object({}) do |(month, invoiced_amount), result_hash|
  result_hash[month.to_sym] = {
    Invoiced_data: invoiced_amount,
    payment_transaction_data: payment_transaction_data.fetch(month, 0.0)
  }
end

# 查看结果
p combined_data

代码细节说明:

  • each_with_object({}):遍历invoiced_data的每一组键值对,同时逐步构建新Hash,确保最终结果和原invoiced_data的键集合完全一致。
  • month.to_sym:把原字符串格式的月份键转为符号(和你给出的期望结果格式匹配),如果需要保留字符串键,直接去掉.to_sym即可。
  • Invoiced_data: invoiced_amount:直接取用invoiced_data对应月份的值,Ruby会自动将科学计数法的数值(比如0.331027548e7)解析为常规浮点数(3310275.48)。
  • payment_transaction_data.fetch(month, 0.0):用fetch方法安全获取支付数据,若当前月份不在支付Hash中,自动返回默认值0.0,空Hash的情况也能完美处理。

运行这段代码后,就能得到和你预期完全一致的结果。

内容的提问来源于stack exchange,提问作者urjit on rails

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:12:43