我有0.0 24.0 0.0 12.0 0.0 0.0 0.0 0.0 0.0
如何获得这些值的总和? .sum等不适用于花车
编辑:
我在做
<% @data.each do |data| %>
<%= data[ :values ]%>
<%end%>
data[:values]
打印的位置
[5.0, 0.0, 0.0, 0.0, 0.0]
[4.0, 0.0, 0.0, 0.0, 0.0]
[1.0, 0.0, 0.0, 0.0, 0.0]
我只想得到每个数组的第一个值并将它们加在一起得到10.0
@data prints
[{:name=>"BMW", :values=>[0.0, 0.0, 0.0, 0.0, 0.0]}, {:name=>"Asda", :values=>[32.0, 12.0, 0.0, 0.0, 0.0]}]
答案 0 :(得分:7)
假设它们在一个数组中,这可行:
irb(main):001:0> [0.0, 1.0, 3.0].inject(:+)
=> 4.0
编辑:根据您编辑的问题,您似乎想要:
@data.reduce(0) { |sum, x| sum += x[:values][0] }
它抓取每个值的第一个(第0个)元素,并将它们汇总在一起:
irb(main):003:0> @data
=> [{:values=>[0.0, 0.0, 0.0, 0.0, 0.0], :name=>"BMW"}, {:values=>[32.0, 12.0, 0.0, 0.0, 0.0], :name=>"Asda"}]
irb(main):004:0> @data.reduce(0) { |sum, x| sum += x[:values][0] }
=> 32.0
答案 1 :(得分:3)
这里:
irb(main):001:0> values = [[1.0,0.0],[2.0,0.0],[3.0,0.0]]
=> [[1.0, 0.0], [2.0, 0.0], [3.0, 0.0]]
irb(main):002:0> values.map(&:first)
=> [1.0, 2.0, 3.0]
irb(main):003:0> values.map(&:first).inject(:+)
=> 6.0
修订:
@data.map {|hash| hash[:values].first}.inject(:+)
答案 2 :(得分:-1)
如果您有数组:
[0.0, 24.0, 0.0, 12.0, 0.0, 0.0, 0.0, 0.0, 0.0].reduce(:+)
如果不是 - 使用+。
0.0 + 24.0 + 0.0 + 12.0 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0
=&GT; 36.0 或者我想念一些东西?
答案 3 :(得分:-1)
你是否需要以某种奇特的方式获得总和,或者可以在循环中完成它?
我会这样做:
sum = 0
array.each do |a|
sum+=a
end