如何获取注入循环的每个值

iro*_*and 9 ruby

我想得到每个值inject.

例如[1,2,3].inject(3){|sum, num| sum + num}返回9,我想得到循环的所有值.我试过了[1,2,3].inject(3).map{|sum, num| sum + num},但没办法.

我写的代码是这个,但我觉得它是多余的.

a = [1,2,3]
result = []
a.inject(3) do |sum, num|
  v = sum + num
  result << v
  v
end

p result
# => [4, 6, 9]
Run Code Online (Sandbox Code Playgroud)

有没有办法使用的方式inject,并map在同一时间?

Ale*_*kin 5

使用专用Eumerator完全适合这里,但我会为此显示更通用的方法:

[1,2,3].inject(map: [], sum: 3) do |acc, num|
  acc[:map] << (acc[:sum] += num)
  acc
end
#? => {:map => [4, 6, 9], :sum => 9}
Run Code Online (Sandbox Code Playgroud)

这样(使用哈希作为累加器)可以收集她想要的任何东西.旁注:更好地使用Enumerable#each_with_object此处而不是inject,因为前者在每次后续迭代中都不会生成对象的新实例:

[1,2,3].each_with_object(map: [], sum: 3) do |num, acc|
  acc[:map] << (acc[:sum] += num)
end
Run Code Online (Sandbox Code Playgroud)