如何在数组上添加迭代结果

时间:2016-05-19 13:19:47

标签: arrays ruby

我有两种方法(每种方法输出相同的方法):

def number(array)
  array.each do |val1, val2|
    (val1 - val2)
  end
end

number([[10, 0], [3, 5], [5, 8]])
# => 10, -2, -3

def number(array)
  array.each do |index|
    (index[0] - index[1])
  end
end

number([[10, 0], [3, 5], [5, 8]])
# => 10, -2, -3

我想知道如何找到迭代结果的总和。我虽然可以做类似的事情:

(val1 - val2).sum

但这不起作用。

3 个答案:

答案 0 :(得分:4)

通常的做法是:

[[10, 0], [3, 5], [5, 8]].inject(0){|sum, (val1, val2)| sum + val1 - val2}
# => 5

答案 1 :(得分:1)

[[10, 0], [3, 5], [5, 8]].map{|elem| elem[0] - elem[1]}.inject{|sum,elem| sum + elem}

答案 2 :(得分:1)

此答案与其他答案相同,只是使用不同的语法。

[[10, 0], [3, 5], [5, 8]].map { |a| a.reduce(:-) }.reduce(:+)