each では要素を1つずつしか取得できないが、each_cons や each_slice を使用すればループ1回で複数個の要素を扱える。
each_cons(n) は連続した n 個の要素を1つずつずらしながら取得できる。
n = 3
[1, 2, 3, 4, 5].each_cons(n) do |a, b, c|
puts "#{a}, #{b}, #{c}"
end
# >> 1, 2, 3
# >> 2, 3, 4
# >> 3, 4, 5
一方 each_slice(n) は n 個の要素を n ずつずらしながら取得する。
n = 3
[1, 2, 3, 4, 5, 6, 7, 8].each_slice(n) do |a, b, c|
puts "#{a}, #{b}, #{c}"
end
# >> 1, 2, 3
# >> 4, 5, 6
# >> 7, 8,
使う機会は少ないかもしれないが、知らないと書くのが少し面倒だったりする(可読性的な意味で)。こういうメソッドがあるということくらいは知っておきたい。