如何在Ruby中仅求数组中对象属性的正负值之和
我知道我可以使用inject方法在Ruby中对数组中的对象的属性求和。例如,我可以使用以下公式对数组中所有代理的现金进行求和:如何在Ruby中仅求数组中对象属性的正负值之和,ruby,arrays,sum,inject,Ruby,Arrays,Sum,Inject,我知道我可以使用inject方法在Ruby中对数组中的对象的属性求和。例如,我可以使用以下公式对数组中所有代理的现金进行求和: sum_of_cash = agents.inject(0) { |sum, e| sum + e.cash } 但是,我如何才能仅对物业的正值或负值进行求和,例如,仅对正值或负值现金余额进行求和 我能想到的一种方法是使用if函数在数组上进行循环,并且仅当值为正数时求和,但是如果可能的话,我正在寻找一种更干净的方法 谢谢 我觉得像这样的东西更优雅一点 agents.m
sum_of_cash = agents.inject(0) { |sum, e| sum + e.cash }
但是,我如何才能仅对物业的正值或负值进行求和,例如,仅对正值或负值现金余额进行求和
我能想到的一种方法是使用if函数在数组上进行循环,并且仅当值为正数时求和,但是如果可能的话,我正在寻找一种更干净的方法
谢谢 我觉得像这样的东西更优雅一点
agents.map(&:cash).select { |c| c > 0 }.inject(&:+)
我觉得像这样的东西更优雅一点
agents.map(&:cash).select { |c| c > 0 }.inject(&:+)
我可以想出两种方法,不需要在注入中使用
if
:
sum_of_cash=代理。注入(0){sum,e|sum+e.positive_cash}
sum\u of_case=agents.map(&:cash)。如果{c | c>0},则保留。reduce(&:+)
我可以想出两种方法,不需要在注入中使用
if
:
sum_of_cash=代理。注入(0){sum,e|sum+e.positive_cash}
sum\u of_case=agents.map(&:cash)。如果{c | c>0},则保留。reduce(&:+)
请注意,使用
keep\u if
将销毁代理的原始内容。最好选择。请注意,如果您正在销毁代理的原始内容,请使用保留\u。最好选择。