こんばんは。
プログラミングの勉強をしてて初めになんじゃこりゃ〜と思ったのが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重なった時の処理ってああ、親と子みたいな感じだなと感じた、そんな夜でした。
おやすみなさい。