Ruby如何对哈希中results_by_time的所有amount值求和?
如何对Ruby哈希中动态数量的amount值求和?
你可以通过遍历results_by_time数组中的所有元素,提取每个元素里的amount值并累加,不管数组长度如何变化都能适用。
方法一:直接使用sum结合块
利用Ruby的Enumerable#sum方法,直接在遍历过程中完成转换和累加:
total_amount = value[:results_by_time].sum do |time_entry| time_entry.dig(:total, 'BlendedCost', :amount).to_f end puts total_amount # 输出结果:130.9420454444
方法二:先提取所有值再求和
如果需要保留单独的amount数组,可以先用map提取所有值,再调用sum:
all_amounts = value[:results_by_time].map do |entry| entry.dig(:total, 'BlendedCost', :amount).to_f end total = all_amounts.sum
说明
dig方法会安全地逐层获取嵌套哈希的值,如果某一层不存在(比如某个time_entry没有BlendedCost),会返回nil,调用to_f后会转为0,避免报错。- 这两种方法都不需要关心
results_by_time的元素数量,自动遍历所有元素完成求和。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

