for迴圈


#1

arr[x,x,x,x,x,x]
x代表隨意數字
請問要怎麼用for迴圈將[]數字相加


#2

你是要問有一個陣列 arr 要怎麼求合嗎? 這有很多做法,不過你問的是 for 那我們就從 for 開始:

arr = [1, 2, 3, 4, 5]

sum = 0
for val in arr # 從 arr 中歷遍 val
  sum += val # 加總
end

sum #=> 15

那其實在 ruby 裡面,迭代的效能會比 for 迴圈會再來的高一點(其實 for 就是用迭代實做的,只是裡面加了一點黑魔法調整了 scope):

arr = [1, 2, 3, 4, 5]

sum = 0
arr.each do |val| # 迭代 arr 的值
  sum += val
end

sum #=> 15

這邊我們對 arr 的物件作了連續加法(#+)的動作,所以其實我們可以用 #inject/#reduce 來完成他:

arr = [1, 2, 3, 4, 5]

sum = arr.reduce(:+) # 將全部的元素用 + 方法做歸納

sum #=> 15

其實方法很多種,這裏只是順便延伸一下相關的做法 :slight_smile:


#3

補充一個 ruby 2.4 ↑ 才有的
##sum(init=0) → number
Returns the sum of elements. For example, [e1, e2, e3].sum returns init + e1 + e2 + e3.

If a block is given, the block is applied to each element before addition.

If ary is empty, it returns init.

[].sum                             #=> 0
[].sum(0.0)                        #=> 0.0
[1, 2, 3].sum                      #=> 6
[3, 5.5].sum                       #=> 8.5
[2.5, 3.0].sum(0.0) {|e| e * e }   #=> 15.25
[Object.new].sum                   #=> TypeError