each_with_index で index の値を利用する時、
たとえば 0 ではなく 1 から使いたい場合…
%w(杏子 さやか マミ).each_with_index {|magica, i| puts "#{i + 1} #{magica}" }
# 1 杏子
# 2 さやか
# 3 マミ
とわざわざ +1 を書いたりするのはなんか面倒だ (´・ω・`)
そんなときは Enumerator#with_index(offset = 0)
の出番!
見ての通り、offset 値に任意の数値を指定できるのだ!
Array#each
をブロックなしで呼ぶと、Enumerator 型のオブジェクトが返ってくるので、
そいつに with_index
を呼んでやる。
パッと見、each_with_index に見間違えそうなくらい、そっくりに書けるのが (個人的には) COOL♪
%w(杏子 さやか マミ).each.with_index(1) {|magica, i| puts "#{i} #{magica}" }
# 1 杏子
# 2 さやか
# 3 マミ
ちなみに Ruby 1.8.7 では with_index メソッドの引数で offset を指定することができないため、
この手法は使えません。