丸メガネの備忘録

プログラミング学習中のエンジニア志望30代ギリギリ前半

each_with_indexを使った値の検索方法

備忘録。

input = [1,3,5,6,9,12,23,55,78,90]

上記みたいな不規則な配列があったときに、特定の値の有無を返すプログラムを組みたいときにどうしたらいいか。

def search(target_num, input)

上記もメソッドと境内を使って、あたいがあれば〜番目にあります、なければその数は含まれていない旨を返す。

 

①inputに対してeach_with_indexを使う。

input.each_with_index do |num, index|

これを使うと、input配列に対してnumはindex番目にあります、という情報が出力できるようになる。これ以下にif文を設けて条件を分岐させる。

 

②どんなif文を書くか

if num == target_num
puts "#{index + 1}番目にあります"
return
end

target_numは引数としてきているはずなので実体がある。これに対してinputの各要素(=num)に等しいものがあるかどうかを探すので一行目のような記述になる。

indexは0から始まるので+1して、実態に沿ってにわかりやすいやつにしておく。

 

③elseは使わない。

eachを使っている都合上、ここでreturnを書かず、かつelseを使うと

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

その数は含まれていません

などと、ターミナルのメンタルがヘルスすることになるので、一旦returnで処理を終了させる。条件外の場合の処理を書くのはifの外。

 

後は

search(15,input)

などを記述して、あたいの検索をして帰ってくるものを確かめる。