Таким образом, ваш цикл находится, например, в пункте 5, и вы удаляете его. Элементы 6, 7 и т. Д. Перемещаются вверх на 1, и когда ваш цикл идет туда, где раньше был элемент 6, он находит элемент 7.
Но говорить о том, что вы не можете изменить свой массив во время итерации по нему, немного сложно. Вы можете сохранить свой код в точности так, как он есть, если вы просто замените свой each
на reverse_each
. Это перебирает массив от конца к началу, поэтому теперь, когда вы удаляете элемент 5, не имеет значения, что 6 перемещается вверх, потому что вы переходите к 4, а это не изменилось (пока).