我有一个散列数组,每个散列都有一个键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/