0
1

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 3 years have passed since last update.

each_with_indexメソッドを使ってみる

Last updated at Posted at 2020-09-22

表題の通りです。
each_with_indexメソッドを使ってコードを書いてみます。

each_with_indexメソッドとは

要素の繰り返し処理と同時に、その要素が何番目に処理されたのか表すことができるメソッド。
要素の繰り返し処理であればeachメソッドもできるが、
each_with_indexメソッドは、何番目に処理されたものかも表示できるのが特徴。
下記のように書く。

配列名.each_with_index do |item, i|
  # 処理
end

使ってみた(その1)

fruits = ["みかん", "パイナップル", "りんご"]

fruits.each_with_index do |fruit, i|
 puts "#{i}番目のフルーツは、#{fruit}です。"
end

出力結果は下記のようになる。

0番目のフルーツは、みかんです。
1番目のフルーツは、パイナップルです。
2番目のフルーツは、りんごです。

使ってみた(その2)

配列に、ある値が含まれているかを検索して、結果を出力するメソッドを
each_with_indexメソッドを使って書いてみます。
わざわざeach_with_indexメソッド使わなくてもバイナリーサーチ使えば良いのでは

配列は
input = [3, 6, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
検索したい値は変数target_numに代入するとします。
下記のような検索結果が出るようにします。

# 検索したい値が配列の中にあったとき。たとえば検索したい値が12だった場合
左から4番目にあります

# 検索したい値が配列の中にないとき
その数は含まれていません

回答例

def search(target_num, input)
  input.each_with_index do |num, index|
    if num == target_num
      puts "左から#{index + 1}番目にあります"
      return
    end
  end
  puts "その数は含まれていません"
end

input = [3, 6, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]

target_num = gets.to_i
search(target_num, input)

解説

今回は検索する処理を行うメソッドをsearchメソッドと定義しました。

そのsearchメソッドの中で、each_with_indexメソッドを使い、
配列inputに格納されている値をnumとして1つずつ取り出し、取り出された順で番号付けをします。その番号はindexに入ります。

numと、target_num(検索したい値が入っている)が同じか比べます。
もし同じであれば、その値が配列の左から数えて何番目にあるのかを出力したいので、
puts "左から#{index + 1}番目にあります"とします。
そして、もう検索結果が出てしまって、これ以上の検索が必要なくなるのでreturnで終わりにします。

配列に格納されているすべての値と、検索したい値が同じにならなかった場合は、
puts "その数は含まれていません"とします。

おわり

以上です。
本題から少しずれますが解説部分を書くのがなかなか難しい・・。
最後まで読んでくださった方ありがとうございました。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?