Что не так в этой простой формуле?

Рейтинг: 0Ответов: 1Опубликовано: 18.09.2014

Ruby меня пинает уже пол дня, а я так и не могу понять, в чем причина. Задача - найти локальный максимум в массиве чисел. Формула ниже. Помогите по-братски.

m = [1, 12, 3, 33, 3, 4, 2, 4, 6, 7]

p m.select{ |x| ((m[x] > m[x-1]) && (m[x] > m[x+1])) }

Лог ошибок в терминале при вычислении:

comparison of Fixnum with Array failed (ArgumentError)

from rub.rb:2:in `block in <main>'
from rub.rb:2:in `select'
from rub.rb:2:in `<main>'

Ответы

▲ 1

select применяет блок для каждого элемента (у вас это |х|) и возвращает массив значений, для которых результат блока -- истина. В вашем случае в |x| не индекс, а значение.

http://ruby-doc.org/core-2.1.2/Enumerable.html#method-i-select

Я бы сделал простым циклом. Но можно и с помощью inject.