当我在Ruby中编写方法时,我常常想“我敢打赌这可以做得更简单”。这是一个示例方法。它会添加从1开始的所有数字,直到数字n
。有没有办法省略变量solution
?
def sum n
solution = 0
for i in 1..n do
solution += i
end
solution
end
答案 0 :(得分:11)
使用Enumerable#inject
(或Enumerable#reduce
):
(1..10).inject :+
# => 55
答案 1 :(得分:2)
falsetru's是总和的简写答案。但为了您自己的利益而扩展,inject
通常看起来更像是这样:
def sum n
(1..n).inject {|result, i| result + i}
end
在此示例中,块的结果在每次连续迭代时以result
反馈,因此它构建累计总数。
inject
非常通用,但是还有很多其他迭代器可以帮助您管理计数变量。为初学者查找times
,each
和map
。