Рассматривали ли вы использование delete_if
?
def neutralize(sentence)
words = sentence.split(' ')
words.delete_if { |word| negative? word }
words.join(' ')
end
def negative?(word)
[ 'dull', 'boring', 'annoying', 'chaotic' ].include? word
end
puts neutralize('These dull boring cards are part of a chaotic board game.')
Изменение массива, для которого вы выполняете итерацию, может вызвать проблемы.Например:
a = [1, 2, 3, 4]
a.each { |i| a.delete i }
p a
# => [2, 4]
Вам следует избегать этого при большинстве обстоятельств.
Чтобы лучше понять, почему вывод такой, какой он есть, см. Этот пример:
a = [1, 2, 3, 4, 5, 6]
a.each_with_index do |item, index|
puts "deleting item #{item} at index #{index}:"
a.delete item
p a
end