#1、最初に#
現在、プログラミング学習を初めて2ヶ月の者です。
今回は、rubyにてeach文の中にeach文を入れるとどうなるのか、ということについて記載しようと思います。
具体的には、以下の通りです。
①each文の中にeach文を入れると、どんな動きをしているのか
②動きを確認した方法
なお、each文の中にeach文とは、以下を想定しています。
#簡略に記載してます。
array.each do |i|
array.each do |num|
end
end
私と同じ学習をはじめたばかりの方にとって、何かプラスになれば幸いです!
※初心者投稿の記事になります。もっとこうした方がいいよ!といったことがあれば教えていただきたいです!
#2、どんな動きをしているのか#
今回はわかりやすくするために、先のコードに少し記述を加えた
以下のコードを使用します。
array = [1,2,3]
array.each do |i|
puts i
array.each do |num|
puts num
end
end
では、どんな動きをしているのか結論からお伝えすると、
要素を一つ取り出したときに、要素を全て表示させています。
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文をいれて、要素を一つずつ照らし合わせる処理をするのですが、
この処理よくわからんなあ、どうしたらわかるかなあといった感じでした。
そのとき、ふとシンプルに記述して実装してみたらいいんじゃないか?と思いつきました。
今のところは、この方法で処理の流れのイメージがつきやすくなりました。