我一直在研究红宝石,并且一直在做一些练习,看看我学到了多少,并且我遇到了这个:
问:写一个方法,sum取一个数字数组并返回数字之和。
答案是针对问题提供的,但我不明白为什么或如何。我希望任何人都能帮助我用简单的语言为我解释,以便我能理解这一点。请记住,我是编程新手。谢谢。
答:
def sum(nums)
total = 0
i = 0
while i < nums.count
total += nums[i]
i += 1
end
# return total
total
end
答案 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
与提供给您的代码不同,这不会使用某些基本数学之外的任何概念。 (折叠和加法。)