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

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

最佳答案

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 的每次迭代创建新的散列循环。

关于ruby - 如何返回具有修改值的哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747452/

相关文章:

ruby-on-rails - 回形针 imagemagick 转换为灰度并裁剪以适合 144x144#

ruby - Rspec 与系统交互

ios - 枚举NSArray从给定索引开始以两种方式搜索(环绕)

python - 如何迭代 azure.core.paging.ItemPaged?

Python:将字符串列表 'keys' 枚举为整数

ruby-on-rails - Carrierwave 在控制台上给出错误

Ruby 可执行文件不工作

ruby - 如何使数组仅在第一次调用函数时初始化?

python - 如何从可迭代的保持原始索引中枚举选定的元素?

python - 使用 enumerate() 枚举带有字母而不是数字的项目