ume

Ruby indexメソッド 概要と使い分け

概要

indexメソッドは配列の要素のインデックス番号を検索するメソッド

使い方

配列.index(引数)
#配列の中から引数のindex番号を戻り値として返します。配列に引数の要素が見つからない場合nilを戻り値として返します。


numbers = [100,200,300]

numbers.index(100)
#出力結果0

numbers.index(400)
#出力結果nil
indexの引数にブロックも渡すことができ条件に一致した最初の要素のインデックス番号を1つ戻り値として返す。
numbers = [100,200,300]
numbers.index{|num| num > 200}
#出力結果300のindex番号の2が出力される。
2次元配列のインデックス番号も調べられる。
numbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

numbers.index{|num| num.index(2)}
#出力結果0
解説

まずnumbersから配列を1つずつ取り出し|num|に代入する。つまり最初は[1,2,3].index(2)のようになる。配列の中に2があるかを調べる.

配列の中に2がある場合.
numbersのindex番号(0)を返り値として返却する

配列の中に2がない場合.
⇨次の配列を|num|に代入し、処理を繰り返す。 ⚠️もしnumbersの中の配列を全て|num|に代入しindexの番号が見つからない場合、最終的にnilを返す

二次元配列の要素のインデック番号を知りたい時
numbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
numbers.flatten!
numbers.index(9)
#出力結果8
解説

flattenメソッドを使うと2次元配列を配列に変換できる。

numbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
puts numbers.flatten!
#出力結果[1, 2, 3, 4, 5, 6, 7, 8, 9]

まとめ

  • indexメソッドは配列内のインデック番号を取得するメソッド。

  • 引数にブロックを渡しindex番号の検索方法を少し複雑に指定できる。

  • 類似のメソッドにfind_indexメソッドがあり挙動は同じなので好きな方を使う

参考情報

https://docs.ruby-lang.org/ja/latest/method/Array/i/find_index.html