如何返回具有修改值的哈希数组

时间:2017-06-25 14:44:16

标签: ruby enumerate

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

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

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}) }

1 个答案:

答案 0 :(得分:3)

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

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

请注意使用#merge!而不是#merge,以便在循环的每次迭代中不为combined创建新哈希。