配列に、
input=[1,3,5,6,10,14,17,21,27,33,39,41,48]
が含まれていています。serchメソッドを使用することでその値が何番目に含まれているか結果を返すことができます。
例)
search(17,input)#処理の結果#=> 6番目にありますsearch(1,input)#処理の結果#=> その数は含まれていません
使用例はこのような感じです。
このsearchメソッドをeach_with_indexメソッドを使って作成してみたいと思います。
each_with_indexメソッドはRubyに標準で組み込まれているメソッドで、要素の繰り返しと同時に、その要素が何番目に処理されたのかも表すことができます。
参考:
Ruby 3.0.0リファレンスマニュアル, each_with_index
例)
fruits=["イチゴ","みかん"."ぶどう"]fruits.each_with_indexdo|item,i|puts"#{i}番目のフルーツは、#{item}です。"end#出力結果#0番目のフルーツは、メロンです。#1番目のフルーツは、バナナです。#2番目のフルーツは、アップルです。
このように使うことができます。
それでは、本題に入っていきたいと思います。
まず、searchメソッドを呼び出す方法を考えたいきたいと思います。
配列を定義して、呼び出す時に何か数字を実引数としてセットしてみます。今回は17という値をセットしたいと思います。
defsearch(target_num,input)endinput=[1,3,5,6,10,14,17,21,27,33,39,41,48]search(17,input)
search(17, input)で呼び出されたsearchメソッドでは、実引数でセットした値を仮引数(target_num, input)で受け取ります。
今回はtarget_numが17を受け取り, inputがinput(中身は配列が代入されています)を受け取っています。
次にsearchメソッド内の処理を考えていきたいと思います。
each_with_indexメソッドを使用して、配列の中身を一つ一つ取り出し、要素ごとに割り当てられている添字を同時に取得します。
defsearch(target_num,input)input.each_with_indexdo|num,index|endend
最後に条件分岐処理を利用して配列の中にある値とそうでないときの処理を記述していきます。
合わせると以下のような記述になります。
defsearch(target_num,input)input.each_with_indexdo|num,index|ifnum==target_numputs"#{index+1}番目にあります"returnendendputs"その数は含まれていません"endinput=[1,3,5,6,10,14,17,21,27,33,39,41,48]search(17,input)
num と target_numが等しい時にputs "#{index +1}番目にあります"と出力してあげるようにします。なぜindex +1としているかというと、プログラムは0から数えていくためです。
人間のは基本的に1から数えていくため、プログラムの数え方の誤差を埋めるためにindex +1としています。