2

我一直在研究 ruby​​ 并且一直在做一些练习,看看我学到了多少,我遇到了这个:

问:编写一个方法 sum ,它接受一个数字数组并返回数字的总和。

已为该问题提供了答案,但我不明白为什么或如何。我想从任何人那里得到一些帮助,用简单的术语为我解释它们,以便我能理解这一点。请记住,我是编程新手。谢谢你。

A:

def sum(nums)
  total = 0

  i = 0
  while i < nums.count
    total += nums[i]

    i += 1
  end

  # return total
  total
end
4

4 回答 4

2

让我添加一些评论,看看这是否有帮助......

def sum(nums)

  # initialize total to zero
  total = 0

  # initialize a counter to zero
  i = 0

  # while the counter is less than the size / count of the array...
  while i < nums.count

    # add the number at the array index of i to total
    # this can also be written:  total = total + nums[i]
    total += nums[i]

    # increment your counter, then loop
    i += 1
  end

  # return total
  total
end
于 2013-11-03T19:28:07.883 回答
2

用红宝石做到这一点的方法是

def sum (nums_array)
  nums_array.inject(:+)
end

等效地,您可以使用reduce,它是inject.

Inject 迭代您的数组,累积地将任何二进制操作应用于每个元素,返回累加器(在本例中为所有元素的总和)。你也可以做类似的事情

  nums_array.inject(:-)  
  nums_array.inject(:*)
  nums_array.inject(:%)

等等。

测试任何 Ruby 方法的最佳位置是在命令行的 IRB 或 PRY 中,或者,如果您更愿意使用带有 GUI 的东西并在 Mac 上工作,那么 CodeRunner很棒。

有关注入/减少(或您遇到的任何方法)的更多信息,ruby 文档是一个很好的资源。

于 2013-11-03T23:02:49.380 回答
1
def sum(nums)
  total = 0
  i = 0 # i is set to `0`, as in Ruby array is 0 based.i will point to the
        # first element in the array initially.
  while i < nums.count # loop to iterate through the array till the last index come.
    total += nums[i] # nums[i] is for accessing the element from the array at index i.
    # and adding the value of total in previous iteration to current element 
    # of the array at i(or to the initial value of total,if it is the first iteration).
    i += 1 # this move the i from current index to next index of the array.
  end

  # return total
  total
end

i += 1i=i+1被称为.Same的语法糖total += nums[i]

于 2013-11-03T19:28:42.340 回答
1

太可怕了。写的人首先不了解 Ruby。显然,他甚至不太懂编程。忘掉它。

这就是 Rubyist 或几乎任何其他程序员解决该问题的方式:

def sum(nums)
  nums.inject(0, :+)
end

与提供给您的代码不同,这不使用一些基本数学之外的任何概念。(折叠和加法。)

于 2013-11-03T20:49:29.160 回答