【问题标题】:How to return array of hashes with modified values如何返回具有修改值的哈希数组
【发布时间】:2017-06-25 14:44:16
【问题描述】:

我已经成功地将对象数组转换为哈希数组。但我也想在获得组合哈希之前稍微修改对象。

这就是我将对象数组转换为组合哈希的方法:

prev_vars.map(&:to_h).reduce({}, :merge)
{ "b"=>#<Money fractional:400 currency:GBP> }

但是我想要的是,需要另外调用to_i的是:

{ "b"=> 4 }

我使用这条线得到了这个工作,但我正在寻找一个更优雅的解决方案:

prev_vars.map(&:to_h).reduce({}) { |combined, v| combined.merge({v.keys[0] => v.values[0].to_i}) }

【问题讨论】:

    标签: ruby enumerate


    【解决方案1】:

    prev_vars 有多大? map(&amp;:to_h) 可能需要相当多的内存开销,因为它实例化了一个全新的数组。相反,我建议切换顺序:首先是#reduce,然后是#to_h:

    prev_vars.reduce({}) do |combined, var|
      combined.merge! var.to_h.transform_values!(&:to_i)
    end
    

    注意使用#merge! 而不是#merge,这样循环的每次迭代都不会为combined 创建新的哈希。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2017-03-21
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 2012-04-12
      相关资源
      最近更新 更多