感情的ドリル

Ruby県から飛び出して関東にきたオタク

each_with_indexとeach.with_index

people = %w(高橋 田中 谷口)
 
 idx = 0
 people.each do |person|
   puts "#{idx}: #{person}"
   idx += 1
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each_with_index do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each.with_index(0) do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 0: 高橋
 #=> 1: 田中
 #=> 2: 谷口
 
 people.each.with_index(5) do |person, idx|
   puts "#{idx}: #{person}"
 end
 #=> 5: 高橋
 #=> 6: 田中
 #=> 7: 谷口

each_with_indexはブロック変数の2個目に0から始まる添え字を突っ込む。冒頭の例、each内でidxという変数をこねくり回すのと同じ動きだ。 each.with_index(start)は、ブロック変数の2個目に任意の数値から始まる添え字を突っ込む。0を指定すれば0からカウントするし、5を指定すれば5からカウントする。