Rubyのeachメソッドは、配列の要素を1つずつ取り出すのに便利なメソッドですが、取り出す要素が何番目のものかを取得したいときがあります。
そのような時に、eachメソッドの代わりに使えるのがeach_with_indexメソッドです。
each_with_indexの使い方
each_with_indexメソッドは、以下のように記述します。eachメソッドと似ていますが、ブロック引数がeachメソッドより1つ多いです。
1 2 3 |
配列データ.each_with_index do |x, i| 処理内容 end |
変数xは配列の書く要素、変数iは配列の要素の順序(インデックス)となります。インデックスは、0から始まる整数で、要素が増える毎に1ずつ増えます。
サンプル
下記のような配列データがあるとします。
1 |
a = ["Spring", "has", "com"] |
変数aから要素を取り出す場合は、eachメソッドでもできますが、何番目の要素か(インデックス)を取得する場合は、each_with_indexメソッドを使います。
この各行に数字で何番目の要素かを示す見出しをつけてみましょう。
1 2 3 4 |
a = ["Spring", "has", "come"] a.each_with_index do |x, i| puts "#{i}: #{x}" end |
x、iは仮に付けた変数名なので、任意の変数名をつけることができます。また、#{i}と#{x}は文字列の中で、変数を取り出す(評価、展開)するのに使われます。
実行結果は以下のようになります。
1 2 3 |
0: Spring 1: has 2: come |
あるまとまったデータから個々のものを取り出すのに便利なeachの働きに、さらに加えて同時に取り出した順序の番号を取り出せるのがeach_with_indexです。より便利なeachとして覚えておくとよいでしょう。