ruby - 将注入(inject)与哈希数组一起使用

标签 ruby

我有一个散列数组,每个散列都有一个键lol,它有一个整数值。我想总结这些值,注入(inject)总是有效,但现在我得到一个异常(exception):

array = [{lol: 1}, {lol: 2}]
array.inject {|memo, (key, value)| memo + value} =>
NoMethodError: undefined method `+' for {:lol=>1}:Hash
from (irb):26:in `block in irb_binding'
from (irb):26:in `each'
from (irb):26:in `inject'
from (irb):26

有什么事吗?

最佳答案

您可以使用flat_map(&:values) 获取所有哈希值,然后使用inject(:+) 对它们求和。

[{lol: 1}, {lol: 2}].flat_map(&:values).inject(:+)

您的方法不起作用的原因是注入(inject)将生成 block 的每个散列,而不是数组中每个散列的每个键/值对。如果你想保留你的解决方案,你会想要这样的东西:

array.map {|hash| hash.inject(0) {|memo, (key, value)| memo + value } }.inject(:+)

关于ruby - 将注入(inject)与哈希数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695942/

相关文章:

mysql - 在 Ruby on Rails 中在运行时构建表

html - 使用嵌入式 Ruby 代码 (erb) 缩进 HTML

ruby - AES 在 ColdFusion 中加密,在 ruby​​ 中解密

javascript - Rails 应用程序在加载整个页面时向客户端发送 JavaScript,但在单击 link_to root_path 时不发送 JavaScript?

ruby-on-rails - 了解 bundler 依赖解析

ruby - Capybara - 使用参数在表单中填写表单元素

ruby - 如何在 vagrant 代理后面安装代理插件

Ruby Savon 绑定(bind)问题

ruby-on-rails - 在 VM Vagrant Box 中创建 Windows 上的 Ruby on Rails 环境

ruby - 如何在不同的服务器上运行 Resque worker 但从一台 redis 服务器轮询作业