Spi*_*sch 46 ruby arrays sum object inject
我理解为了在Ruby中对数组元素求和,可以使用inject方法,即
array = [1,2,3,4,5];
puts array.inject(0, &:+)
Run Code Online (Sandbox Code Playgroud)
但是如何在对象数组中求和对象的属性呢?
有一个对象数组,每个对象都有一个属性"现金",例如.所以我想将他们的现金余额总计为一个.就像是...
array.cash.inject(0, &:+) # (but this doesn't work)
Run Code Online (Sandbox Code Playgroud)
我意识到我可能会创建一个仅由物业现金组成的新阵列,并总结一下,但如果可能的话,我正在寻找一种更清洁的方法!
Yur*_*hov 62
array.map(&:cash).inject(0, &:+)
Run Code Online (Sandbox Code Playgroud)
要么
array.inject(0){|sum,e| sum + e.cash }
Run Code Online (Sandbox Code Playgroud)
jac*_*lin 50
在Ruby On Rails中,您可能还会尝试:
array.sum(&:cash)
它是注入业务的捷径,对我来说似乎更具可读性.
http://api.rubyonrails.org/classes/Enumerable.html
The*_*heo 10
#reduce采用一个块(这&:+是创建proc/block的快捷方式+).这是做你想做的事的一种方式:
array.reduce(0) { |sum, obj| sum + obj.cash }
Run Code Online (Sandbox Code Playgroud)
小智 5
最简洁的方式:
array.map(&:cash).sum
Run Code Online (Sandbox Code Playgroud)
如果地图中生成的数组有 nil 项:
array.map(&:cash).compact.sum
Run Code Online (Sandbox Code Playgroud)