配列.include? / index / find_index
| 対応: | Ruby 1.8(2003) |
|---|
配列の中に特定の要素が含まれているか確認したり、その要素のインデックスを取得したりするメソッドです。
構文
# 要素が含まれているか判定します。
配列.include?(値)
# 条件に一致する最初の要素のインデックスを返します。
配列.index(値)
配列.index { |要素| 条件式 }
# index の別名です。
配列.find_index(値)
配列.find_index { |要素| 条件式 }
# 条件に一致する最後の要素のインデックスを返します。
配列.rindex(値)
配列.rindex { |要素| 条件式 }
メソッド一覧
| メソッド | 概要 |
|---|---|
| include?(val) | 配列に指定した値が含まれていれば『true』を、含まれなければ『false』を返します。 |
| index(val) | 最初に一致した要素のインデックスを返します。見つからない場合は『nil』を返します。 |
| index { |e| ... } | ブロックの条件に最初に一致した要素のインデックスを返します。 |
| find_index | 『index』の別名です。同じ動作をします。 |
| rindex(val) | 最後に一致した要素のインデックスを返します。見つからない場合は『nil』を返します。 |
サンプルコード
sample_array_include_index.rb
members = ["岡部倫太郎", "牧瀬紅莉栖", "椎名まゆり", "牧瀬紅莉栖", "橋田至"]
# include? で存在確認をします。
puts members.include?("牧瀬紅莉栖") # true
puts members.include?("阿万音鈴羽") # false
# index で最初に一致したインデックスを取得します。
puts members.index("牧瀬紅莉栖") # 1
puts members.index("阿万音鈴羽").inspect # nil(見つからない場合)
# ブロックを使って条件検索をします。
numbers = [10, 25, 3, 47, 8]
puts numbers.index { |n| n > 20 } # 1(25が最初に一致)
puts numbers.find_index { |n| n > 20 } # 1(同じ動作)
# rindex で最後に一致したインデックスを取得します。
puts members.rindex("牧瀬紅莉栖") # 3
# インデックスを使った要素取得に活用できます。
idx = members.index("椎名まゆり")
if idx
puts "椎名まゆりは#{idx}番目にあります。" # 椎名まゆりは2番目にあります。
end
# 特定の条件に合う要素の位置を探します。
scores = [65, 82, 91, 78, 55]
pass_line = 80
first_pass = scores.index { |s| s >= pass_line }
puts "最初に合格した番号: #{first_pass}" # 最初に合格した番号: 1
ruby array_include_index.rb true false 1 nil 1 1 3 椎名まゆりは2番目にあります。 最初に合格した番号: 1
概要
『include?』は要素の存在を確認するだけでよい場合に使います。インデックス(位置)が必要な場合は『index』または『find_index』を使います。どちらも同じ動作をしますが、ブロックを使う場合は『find_index』の方が意図が伝わりやすいコードになることがあります。
『index』や『rindex』は見つからない場合に『nil』を返します。戻り値を直接演算に使う場合は必ず『nil』チェックを行ってください。
条件に一致する要素そのものを取得したい場合は『select / find』を、要素数を数えるには『count』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。