【问题标题】:'for' loop summation in rubyruby 中的“for”循环求和
【发布时间】:2018-07-18 07:18:26
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你在哪里定义了sum 用于你的方法addArray
  • 另一方面,Ruby 中枚举的for x in something do 语法并不是真正的约定,即使根据语言开发人员的说法,由于遗留原因,它仍然存在于语言中。 array.each 将是执行此操作的“标准方式”。另请注意,for 语法处理范围的方式与普通块不同。
  • 你问“这个思维过程有什么问题?” Stack Overflow 不是这样工作的。 需要告诉我们出了什么问题,然后我们可以帮助您解决问题。您收到错误消息吗?如果是,它说什么,它出现在哪一行?你得到的结果不是你期望的结果吗?如果是,你期望什么结果,为什么,你得到什么结果,为什么这个结果不是正确的?你观察到的行为不是你期望的行为吗?如果是,你期望什么行为,为什么,你观察到什么行为,为什么这种行为不正确?

标签: ruby local-variables


【解决方案1】:

您的问题是您没有定义变量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])

【讨论】:

  • 啊。谢谢你。我以为我用'+='来定义它。谢谢老兄
【解决方案2】:
def addArray(array)
  array.sum
end

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

【讨论】:

    【解决方案3】:

    正如其他人所提到的,您尚未定义 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
    

    【讨论】:

    • summethod 自 2.4 以来就在 Ruby(非 Rails)中。
    • 感谢@steenslag - 已更新以反映这一点。确实检查了我认为已经介绍过的内容,但肯定是查看了错误的文档:)
    • @rob - 你最后做了什么?这有帮助吗?
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多