我需要帮助理解:写一个方法,sum取一个数字数组并返回数字的总和

时间:2013-11-03 19:24:30

标签: ruby sum

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

问:写一个方法,sum取一个数字数组并返回数字之和。

答案是针对问题提供的,但我不明白为什么或如何。我希望任何人都能帮助我用简单的语言为我解释,以便我能理解这一点。请记住,我是编程新手。谢谢。

答:

def sum(nums)
  total = 0

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

    i += 1
  end

  # return total
  total
end

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

使用ruby执行此操作的方法是

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

同样,您可以使用reduce,这是inject的别名。

对数组进行迭代迭代,对每个元素应用任何二元运算,返回累加器(在本例中为所有元素的总和)。您也可以执行类似

的操作
  nums_array.inject(:-)  
  nums_array.inject(:*)
  nums_array.inject(:%)

等。

测试任何Ruby方法的最佳位置是在命令行中使用IRB或PRY,或者,如果您更喜欢使用GUI并在Mac上工作,CodeRunner很棒。

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

答案 2 :(得分: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 += 1被称为i=i+1的句法糖。total += nums[i]也是如此。

答案 3 :(得分:1)

这是可怕的。谁写的都不了解Ruby的第一件事。显然,他甚至不太了解编程。别忘了。

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

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

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