Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何返回具有修改值的哈希数组_Ruby_Enumerate - Fatal编程技术网

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

Ruby 如何返回具有修改值的哈希数组,ruby,enumerate,Ruby,Enumerate,我已经成功地将对象数组转换为哈希数组。但我也希望在获得组合哈希之前稍微修改对象 以下是我将对象数组转换为组合哈希的步骤: prev_vars.map(&:to_h).reduce({}, :merge) { "b"=>#<Money fractional:400 currency:GBP> } 我使用这一行实现了这一点,但我正在寻找更优雅的解决方案: prev_vars.map(&:to_h).reduce({}) { |combined, v| combin

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

以下是我将对象数组转换为组合哈希的步骤:

prev_vars.map(&:to_h).reduce({}, :merge)
{ "b"=>#<Money fractional:400 currency:GBP> }
我使用这一行实现了这一点,但我正在寻找更优雅的解决方案:

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

上一个变量有多大<代码>映射(&:to_h)可能需要相当大的内存开销,因为它实例化了一个全新的数组。相反,我建议改变顺序:首先减少,然后再减少到

prev_vars.reduce({}) do |combined, var|
  combined.merge! var.to_h.transform_values!(&:to_i)
end
注意
#merge
而不是
#merge
,这样就不会为循环的每个迭代的
组合的
创建新的哈希

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