each.with_indexとは!?
さて、このeach.with_indexですが、2つのメソッドが組み合わさったものでした。
1つずつ振り返りましょう。
eachメソッド
eachメソッドは、範囲オブジェクトの中の要素を順に取得して変数に格納し、「do」から「end」までの処理を実行するんでしたよね!!(範囲オブジェクトに含まれる要素が無くなるまで繰り返し行われます。)
pictweetでは、投稿したツイートを表示する際などに、利用していたお馴染みのメソッドでしたね。
with_indexメソッド
こちらがなかなか聴きなれないメソッドでした!! こちらは、データに番号を振りたい時に使えるメソッドで、今回のようにeachメソッドと一緒にしてeach.with_indexとして使ったり、map.with_indexとかselect.with_index sort_by.with_indexなどとして合わせて使うことが多いようですね。
each.with_indexの使い方
上記2つのメソッドの組み合わせなので、そのままですが、each.with_indexを使うと要素の数だけ処理を繰り返し実行し、繰り返しごとに番号が振ることができます。以下のようなコードでは、pikachuという配列オブジェクトの要素を順に要素の数だけブロックを繰り返し実行し、繰り返しごとに | で囲われている部分の i に番号が入ります。
これをターミナルで実行するとこのようになりました!!
番号が振られましたね!! お、前に配列を勉強した時のように、番号を振られるのもデフォルトでは0から順になるようですね。
でも、ピカチュウの進化を考えると、第一形態→第二形態→第三形態とかいうわけですから、1から番号が振りたいですね。そういう時はwith_index(1)のように、開始したい番号を記述しましょう。
こうするとこうなります。
1番から番号が振られましたね!!
ちなみに、Moooviの開発の際には、それぞれの映画に対する「いいね!」の評価をランキング形式にして、
そのランキング順で番号を振る際に、このメソッドが利用されていました。
しっかり復習しながら、使えるようにしていきたいですね!!