Основываясь на хорошем ответе Марка-Андреса, я хочу дать ответ, который в общих чертах дает следующий элемент для всех элементов, в том числе и последнего, путем дополнения nil
:
arr = [1, 2, 3]
[arr, nil].flatten.each_cons(2) do |element, next_element|
p "#{element} is followed by #{next_element || 'nil'}"
end
# "1 is followed by 2"
# "2 is followed by 3"
# "3 is followed by nil"
Теперь, пока мы на нем, мы также можем предоставить предыдущий элемент для всех элементов:
arr = [1, 2, 3]
[nil, arr, nil].flatten.each_cons(3) do |prev_element, element, next_element|
p "#{element} is preceded by #{prev_element || 'nil'} and followed by #{next_element || 'nil'}"
end
# "1 is preceded by nil and followed by 2"
# "2 is preceded by 1 and followed by 3"
# "3 is preceded by 2 and followed by nil"