红宝石的“ for”循环求和

时间:2018-07-18 07:18:27

标签: ruby local-variables

我正在尝试对数组值求和。这是我的代码:

def addArray(array)
  for i in array do
    sum += i
  end
end

addArray([1,3,6,8,7,10]);

这个思考过程出了什么问题? 我知道还有其他方法可以做到这一点,例如使用reduce甚至是sum,但我不是每次迭代都向sum添加下一个值吗?

3 个答案:

答案 0 :(得分:2)

您的问题是您没有定义变量sum。为了继续您选择的方法,请定义变量并在求和后返回:

def add_array(array)
  sum = 0
  for i in array do
    sum += i
  end
  sum
end

puts add_array([1,3,6,8,7,10])

答案 1 :(得分:0)

正如其他人提到的那样,您尚未定义sum变量。

但是,我觉得值得指出的是,现有的Ruby方法可以完美地处理此问题:

[1,3,6,8,7,10].reduce(:+) # => 35

对于Ruby 2.4及更高版本(或Rails),它更加容易:

[1,3,6,8,7,10].sum # => 35

reduce是一种用于在存在累加器的情况下循环访问值的方法。以上是以下各项的简写:

# `accumulator` is the equivalent of your `sum`, `element` your `i`
[1,3,6,8,7,10].reduce(0) do |accumulator, element|
  accumulator + element
end

答案 2 :(得分:0)

def addArray(array)
  array.sum
end

我认为这是最简单的答案。