从一个数组的一个点汇总到Ruby中同一个数组的另一个点

时间:2015-01-26 04:07:59

标签: ruby arrays variables sum

我想知道如何从数组的一个点到另一个点求和,例如:

array = [1,3,5,6,1]

假设i是移动变量,例如

i = 2

假设k是移动变量,例如

k = 4

我正在寻找的解决方案是从数组[2]到数组[4]求和,所以5 + 6 + 1 = 12

我尝试过使用(array [i] .. array [k])。reduce(:+)但它似乎没有用。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

几乎!但是,当您想要为数组建立索引时,您正在创建两个整数数组值之间的范围!

array[i..k].reduce(:+)

答案 1 :(得分:1)

@glennmcdonald给出的解决方案是进行部分求和的常规方法,但它确实创建了另一个数组:

array[first_index..last_index]

如果该数组足够大,您可能更喜欢或需要在不创建新数组的情况下计算总和。以下是您可以采用的两种方法:

def sum_range1(array, first_index, last_index)
  (first_index..last_index).reduce(0) { |tot,i| tot+array[i] }
end

或者这个:

def sum_range2(array, first_index, last_index)
  array.each_with_index.reduce(0) { |tot,(n,i)|
    tot + ((first_index..last_index).cover?(i) ? n : 0) }
end     

arr = [1,3,5,6,1]
sum_range1(arr, 2, 4) #=> 12 
sum_range2(arr, 2, 4) #=> 12