Rubyでeachメソッドの使用中に何番目の要素がブロック引数にあるのか知りたいときにとった方法についてまとめました。

each メソッド

Rubyのeachメソッドは、配列やハッシュなどのオブジェクトに含まれる要素をひとつづつ取り出して処理をするメソッドです。

このメソッドでは、現在何番目の要素を取り出しているのかわかりません。

そのために、何番目の要素にアクセスしているかを知ることができる、each_with_indexというメソッドがあります。

each_with_index メソッド

each_with_indexメソッドは、次のように使います。

fruits = [apple, orange, banana]
fruits.each_with_index do |fruit, i|
  p "#{i} : #{fruit}"
end
# 0 : apple
# 1 : orange
# 2 : banana

何番目の要素なのかは、ブロック引数の2番目の引数に渡されます。

番号の開始は、0から始まります。

ここで、0から始めたくない場合はeachメソッドの戻り値をwith_indexに渡します。

次の例では、1から始めています。

fruits = [apple, orange, banana]
fruits.each.with_index(1) do |fruit, i|
  p "#{i} : #{fruit}"
end
# 1 : apple
# 2 : orange
# 3 : banana

このようにします。