たくさんeach methodが入ってなんぞや?となった話

こんばんは。

 

プログラミングの勉強をしてて初めになんじゃこりゃ〜と思ったのがeach methodなのですが、今日はeach methodがコード内に2個繰り出されてハァァわからんとコードを睨み数十分。

 

こちらです。

def lone_sum(ary)
 
  uniq_nums = []
  ary.each do |num|
    count = 0
    ary.each do |i|
      if num == i
        count += 1
      end
    end
    if count < 2
      uniq_nums << num
    end
  end

例えば lone_sum([3,2,3])として、

  • 配列の3つの数字を計算、
  • しかし同じ数値が2つ以上含まれている場合、その数値は合計する要素に含めない

と決めましょう。

 

コードを見てみると

ary.each do |num| 

ary.each do |i|

 

ここで2つeach method が出てきて私はアワアワしたんです。
つまりここでは何をしてるかっていうと、

1周の処理:

|num| = 3を取り出します

|i| = 3,2,3 を取り出します(子供的存在のeach method は全部取り出すんだな〜っていうイメージを持ってるんですが、違ったら教えてください。)

コードで見ると

ary.each do |num| *num 1周目の3を出すよ〜
    count = 0
    ary.each do |i|  *i 1周目の3,2,3を出すよ〜
      if num == i
        count += 1
      end
    end

こんな感じですかね?

それを3回繰り返すんです。

では続けます。

if num == i

  count += 1 

この記述ですが、1周目の処理で考えてみましょう。

num = 3, i = 3 (2,3は後から続きます)なので
num = i になりますよね!
ということで count 1 追加です。

1周目、i が2個目(3,2,3)の時はどうでしょう?
num = 3 , i = 2で条件に合いません。
みたいな感じで3周処理を繰り返します。

 

ここで以下の記述ですが:

if count < 2
      uniq_nums << num

count が1だった時は uniq_nums にnumを1追加ということになります。
1周目を例にすると、合計countは2、numは追加されないということになります。(難)

 

自分用にメモしよメモしよという感じでも、説明するのって難しいですね。

つまり、each method重なった時の処理ってああ、親と子みたいな感じだなと感じた、そんな夜でした。

おやすみなさい。