Imagine you have a vector [1,2,3,4] and would like to have easily access adjacent elements:

(1,2) (2,3) (3,4)

I used to do it with a for loop and then just access the i-th and i+1-th element while looping over 1 to length()-1. This seems rather ugly so I made a pairwise iterator

pairwise(x) = zip(x, last(Iterators.peel(x)))

then with

for (x,y) in pairwise("abcd")
@show x*y
end

you get

x * y = "ab"
x * y = "bc"
x * y = "cd"

Am I reinventing the wheel? Is there anything better?

That would not work with e.g. OffsetArrays.jl. It will also not work with stuff like dictionaries that are not indexable. That is why I said I donâ€™t like the i-th element solutions.

using IterTools
for i in partition(1:9, 2, 1)
@show i
end
# i = (1, 2)
# i = (2, 3)
# i = (3, 4)
# i = (4, 5)
# i = (5, 6)
# i = (6, 7)
# i = (7, 8)
# i = (8, 9)
d = Dict(:a => 1, :b => 2, :c => 3)
for i in partition(d, 2, 1)
@show i
end
# i = (:a => 1, :b => 2)
# i = (:b => 2, :c => 3)