【问题标题】:Compare sequential last elements in ruby array比较 ruby​​ 数组中的顺序最后一个元素
【发布时间】:2009-11-04 15:55:54
【问题描述】:

我有一个数组,其中包含我正在处理的值(按特定顺序),如下所示:

myArray = [3,6,5,6,2,1]

我需要评估数组中的元素并确定要复制的元素数量。

规则是:我需要复制那些元素之和不大于前一个元素的元素。

我可以这样表达:

if myArray[-3] > (myArray[-2] + myArray[-1])
   elements_to_copy = [myArray[-2],myArray[-1]]
else
   elements_to_copy = [myArray[-1]]
end

感觉很糟糕,因为我不知道如何让它作为一个迭代函数工作,这样我就可以继续往上走,直到比较失败。

谁能帮忙?

【问题讨论】:

    标签: ruby arrays


    【解决方案1】:
    myArray = [3,5,6,2,1]
    i = 0
    myArray.reverse.inject do |sum, cur|
      break if cur < sum
      i -= 1
      sum + cur
    end
    

    要复制的范围是i..-1

    【讨论】:

      【解决方案2】:
      elements_to_copy = []
      array = myArray.reverse
      array.each_with_index do |item, index|
        if array.values_at[0..[index-1,0].max].sum <= item
          elements_to_copy << item
        end
      end
      

      如果我理解正确的话,应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多