2009-11-04 3 views
0

У меня есть массив, который содержит значения, которые я работаю (в определенном порядке) что-то вроде следующего:Сравните последовательные последние элементы в массиве рубинового

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 

Что чувствует себя очень паршиво, так как я не могу работать, как заставить его работать в качестве итерационной функции, так что я могу продолжить вверх по цепочке пока сравнение не удастся.

Может ли кто-нибудь помочь?

ответ

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.

+0

Ace, thanks Pesto - Я многому учусь из ваших ответов! – Les

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 

Должен сделать трюк, если я вас правильно понимаю.

Смежные вопросы