この記事ではeachメソッドで使用頻度の高いeach_with_index
について書いていきます。
この記事が参考になりそうな人
- eachメソッドがそもそもわからないという人
- each_with_indexがわからないという人
そもそもeachメソッドとは
eachメソッド
は複数のオブジェクトから値を一つづつ取り出すことができるメソッドです。
each文を使ってみる
複数のオブジェクトmucics
を作り、rock, pops, jazz, classicを一つづつ取り出してみます。
sample.rb
musics = ["rock", "pops", "jazz", "classic"]
musics.each do|music|
puts music
end
#musicsの左から順に出力される
=>rock
=>pops
=>jazz
=>classic
musicsの中から一つづつ値を取り出すことができました。
ちなみに2行目の|music|
は変数名です。
まずmusics
から取り出したrockが|music|
に入り、3行目で出力されます。それがpops→jazz→classicという具合にオブジェクトの値がなくなるまで処理が繰り返されます。
each_with_index を使ってみる
先ほどのeachに加えて、要素番号(インデックス)も併せて取り出せるのがeach_with_indexです。
eachメソッドと似ていますが、要素番号を代入する変数を新たに用意するためブロック変数がeachメソッドより1つ多くなります。
(※配列オブジェクトがわからない方はこちらの記事を読んでみてください。)
sample.rb
musics = ["Rock", "pops", "jazz", "classic"]
musics.each_with_index do |music, i|
puts "#{i}: #{music}"
end
#要素と要素番号が併せて出力される
=> 0: rock
=> 1: pops
=> 2: jazz
=> 3: classic
2行目のブロック変数|i|
に要素番号が入り、3行目で出力されています。
まとめ
- eachメソッドは複数のオブジェクトを一つづつ取りだせる。
- each_with_indexは要素と要素番号を併せて取り出せる。