1
2

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】each文の中にeach文を入れると??

Posted at

#1、最初に#

現在、プログラミング学習を初めて2ヶ月の者です。
今回は、rubyにてeach文の中にeach文を入れるとどうなるのか、ということについて記載しようと思います。

具体的には、以下の通りです。
①each文の中にeach文を入れると、どんな動きをしているのか
②動きを確認した方法

なお、each文の中にeach文とは、以下を想定しています。

sample1.rb
#簡略に記載してます。
array.each do |i|
  array.each do |num|
  end
end

私と同じ学習をはじめたばかりの方にとって、何かプラスになれば幸いです!
※初心者投稿の記事になります。もっとこうした方がいいよ!といったことがあれば教えていただきたいです!

#2、どんな動きをしているのか#

今回はわかりやすくするために、先のコードに少し記述を加えた
以下のコードを使用します。

sample2.rb
array = [1,2,3]

array.each do |i|
  puts i
  array.each do |num|
    puts num
  end
end

では、どんな動きをしているのか結論からお伝えすると、
要素を一つ取り出したときに、要素を全て表示させています。

sample3.rb
1 #要素を一つ取り出したとき
1 #要素を全て表示
2 #要素を全て表示
3 #要素を全て表示
2
1
2
3
3
1
2
3

もう少し、具体的に記載していきます。

eachメソッドの動きは以下のイメージです。
①配列から要素を一つ取り出す。
②取り出した要素をブロック変数として使う。
③ブロック変数を使ったりしながら、記述された処理をする
④配列内の要素の数だけ処理を繰り返す。

今回は、配列から要素を一つ取り出した後に、またeach文が来ています。

ということは、先のイメージにのっとると、
①arrayから要素である「1」を取り出す。
②1をブロック変数「i」とする
③iを表示させ、arrayの配列に対してeachメソッドを実装する。
 arrayから要素である「1」を取り出す。
 1をブロック変数「num」とする
 numを表示する
 1,2,3まで処理を繰り返す。
④1,2,3まで処理を繰り返す。

となります。
要は一個取り出した→全部取り出す→一個取り出した→全部取り出すを繰り返しているんです。

#3、どうやって動きを確認したのか#

結論から言うと、terminalで実行しながら確認しました。
なんやかんや、terminalで実行してみてどんな結果がでるのか確認する方法が
いまのところは確実かつ早いと思ってます。

最近は主に以下の流れでやっています。
①仮説を立てる
②どうやったら検証できるか考え、vsコードで実際に書いてみる
③terminalで実装してみる
④期待した結果と違うなら、また仮説を立てる。

each文の中にeach文がどんな動きをするのかについても、上記の方法で確認しました。
ポイントは②です。
ここはとにかく余計なことはなくして、シンプルに書くことがポイントかなと思っています。

もともとは、学習中に以下の問題がでてきたことがきっかけです。
「配列内の要素同士が重複していないかどうか確認する。」

このとき、each文の中にeach文をいれて、要素を一つずつ照らし合わせる処理をするのですが、
この処理よくわからんなあ、どうしたらわかるかなあといった感じでした。
そのとき、ふとシンプルに記述して実装してみたらいいんじゃないか?と思いつきました。

今のところは、この方法で処理の流れのイメージがつきやすくなりました。

1
2
1

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?