在 Ruby 中从数组的一点到同一数组的另一点求和
Summing from one point of an array to another point of the same array in Ruby
我想知道如何从数组的一点求和到另一点,例如:
数组 = [1,3,5,6,1]
假设 i 是一个移动变量,例如
我=2
假设k是一个移动变量,例如
k = 4
我正在寻找的解决方案是从数组 [2] 到数组 [4] 求和,所以 5+6+1 = 12
我试过使用 (array[i]..array[k]).reduce(:+) 但它似乎不起作用。
感谢任何帮助!
差不多!但是当您想要索引数组时,您正在创建两个整数数组值之间的范围!
array[i..k].reduce(:+)
@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
我想知道如何从数组的一点求和到另一点,例如:
数组 = [1,3,5,6,1]
假设 i 是一个移动变量,例如
我=2
假设k是一个移动变量,例如
k = 4
我正在寻找的解决方案是从数组 [2] 到数组 [4] 求和,所以 5+6+1 = 12
我试过使用 (array[i]..array[k]).reduce(:+) 但它似乎不起作用。
感谢任何帮助!
差不多!但是当您想要索引数组时,您正在创建两个整数数组值之间的范围!
array[i..k].reduce(:+)
@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