6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby】繰り返し処理にインデックスをつける(each_with_index, with_index)

Last updated at Posted at 2019-06-24

1.今回のテーマ

Rubyの繰り返し処理(eachやmapメソッド等)を使う際、第二引数を指定することで、インデックスを振ることが出来て便利!というお話です。
インデックスとは、1.2.3.4…という番号のこと。
使用用途はたくさんありますが、例えばランキング一覧作成(1位●●2位▲▲3位■■…等の順位の割り振り)等に便利です。

2.インデックスを降らない場合(通常の繰り返し処理)

本題に入る前に、インデックスを付けない場合の繰り返し処理を復習しておきます。
以下通常のeach文です。

book.rb
@books = Book.all
# Bookモデルの全てのデータをインスタンス変数@booksに代入

@books.each{|book| puts "この本の名前は#{book.name}です"}
# こちら通常のeach文です。@booksをそれぞれbookに代入し、book.nameの値をputsで出力するコードです。
# 以下出力結果の例です。
# => この本の名前はハリーポッターです
# => この本の名前はロードオブザリングです
# => この本の...

3.次にインデックスを付けた場合(each_with_indexメソッド)

book.rb
@books.each_with_index{|book, index| puts "#{index}:この本の名前は#{book.name}です"}
# 第二引数に新しくindexが加わりました。(※引数名はご自身で好きに変えてOK)
# 以下出力結果の例です。
# => 0:この本の名前はハリーポッターです
# => 1:この本の名前はロードオブザリングです
# => 2:この本の名前はワンピースです
# => 3:この本の名前はキングダムです

出力結果を見てみると、処理された順に0から番号がふられていることがお分かり頂けるかと思います!
でもインデックスの番号が0から始まってしまっています。
通常1から番号を付けることが多いと思うのですが、これではいちいち+1しなければいけなくて不便です。
でも安心してください。
実は番号を1からふりたい!という場合もメソッドが用意されています。

4.インデックスを指定の数字で始める場合(each.with_index(n)) ※n=数字

book.rb
@books.each.with_index(1){|book, index| puts "#{index}:この本の名前は#{book.name}です"}
# => 1:この本の名前はハリーポッターです
# => 2:この本の名前はロードオブザリングです

先ほどと違う点は2点
①each_with_indexではなくeach.with_index
②each.with_indexの後に(1)で、初期値を1に指定。(100)にすると100から始まります。

5.他のメソッドにwith_indexを付けることも出来る

eachメソッドを例に出してきましたが、その他の繰り返し処理にも使用できます。
mapメソッドを例に例えると、

animal.rb
animals = [dog, cat, rabbit]
animals.map.with_index(1){|animal, i| "#{i}:#{animal}"}
# 以下出力結果の例です。
# => 1:dog
# => 2:cat
# => 3:rabbit

便利ですね!しかし2章で説明したようなmap_with_indexという書き方はこの場合できません!
each_with_indexと書けるのはeachメソッドのみの特権です。
それ以外の繰り返し処理で使用する場合は、with_indexを使用しましょう。

ぜひ活用してみてください:grin:
ご覧頂きありがとうございました!

6
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?