【问题标题】:Summing from one point of an array to another point of the same array in Ruby在Ruby中从数组的一个点到同一数组的另一个点求和
【发布时间】:2015-01-26 04:07:58
【问题描述】:

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

数组 = [1,3,5,6,1]

假设 i 是一个移动变量,例如

i = 2

假设k是一个移动变量,例如

k = 4

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

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

感谢任何帮助!

【问题讨论】:

    标签: ruby arrays variables sum


    【解决方案1】:

    几乎!但是当你想要索引一个数组时,你会在两个整数数组值之间创建一个范围!

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

    【讨论】:

      【解决方案2】:

      @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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2012-09-28
        • 1970-01-01
        • 2012-09-22
        • 2018-02-16
        • 1970-01-01
        相关资源
        最近更新 更多