比较ruby数组中的顺序最后一个元素

时间:2009-11-04 15:55:55

标签: ruby arrays

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

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

感觉非常糟糕,因为我无法弄清楚如何使它作为一个迭代函数工作,这样我就可以继续上行直到比较失败。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

如果我理解正确的话,应该这样做。