我想得到每个值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在同一时间?
使用专用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)
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |