0
0

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.

配列を利用したrubyプログラムの作成

Posted at

初めに

初学者です。rubyの練習問題を私なりに解説することによって定着するのが目的です。間違いありましたらご指摘お願いします。

問題

以下の配列から数を探して何番目に含まれているか結果を返すsearchメソッドをeach_with_indexを用いて作成してください。

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

searchメソッドの使用例

(使用例)

search(12, input)
=> 4番目にあります

search(7, input)
=> その数は含まれていません

用語の解説

####each_with_index
each_with_indexとはrubyに標準で組み込まれているメソッド。要素の繰り返しと処理と同時にその要素が何番目に処理されたのかも表すことができます。
eachメソッドと似てますよね。書き方もeachメソッドとほとんど同じです。

配列名.each_with_index do|item,i|
end

each文と違うところはブロック変数の中に変数が2つ定義されている点です。この場合、itemが配列の中身、iがその配列の何番目に処理されたかが入ります。

####問題の解説
ではまずsearchメソッドの呼び出す際の処理から入っていきます。まずは配列inputを定義します。次にsearchメソッドを呼び出す際に2つの変数を定義して実引数としてセットします。

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

では、引数をsearchメソッドに引き渡し、each_with_indexで配列の中身と順番を受け取る変数をブロック変数の中に定義します。

def search(target_num, input)
  input.each_with_index do |num, index|
end
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
search(12, input)

ここで一旦整理します。現状searchしたい整数は12です。そして12が配列の何番目にあるのか,もしくはないのかをsearchメソッドを使用して検証します。
では12であるかどうかを検証するには、if文を使い12の時だけ処理をするような記述を書けばいいのです。
配列の中身は変数numに順番に呼び出されます。そして変数target_numの中身は12です。
よって、if num == target_numと記述することによって12の時に処理をすることができます。さらにindexには繰り返された数が入っています。よってindexを出力する記述を書けばいいのです。

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, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
search(12, input)

上記の記述で4番目にあります。と結果がでます。
注意としてindexに+1をしています。これは配列は0から数えられるためです。
また,returnを忘れると要素の数だけ処理を行っていますのでそこも注意が必要です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?