微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用.each方法来解决这个总和问题吗?

如何解决我可以使用.each方法来解决这个总和问题吗?

还是Ruby的新手。新手问题,请忍受我。并提前谢谢您。 我喜欢while循环之类的.each方法。 while循环令我感到困惑。我喜欢.each方法的简洁性。我可以使用.each方法解决以下问题吗?我想弄清楚我是否可以使用此样式循环。

谢谢您的帮助!

 def sum_nums(max)



puts sum_nums(4) # => 10,because 1 + 2 + 3 + 4 = 10
puts sum_nums(5) # => 15

解决方法

是的,您可以使用.each方法来解决此问题。但是,拔头发不是办法。尝试在每个代码块外部将变量初始化为0,然后将代码块中的所有值添加到该变量。

,

所以要回答OP(并从所有其他答案中无耻地借用)

def sum_nums(n)
  (1..n).sum
end

puts sum_nums(5)
# => 15
,

以下是在Ruby中如何对1到n的所有数字求和的几种选择:

1.upto(4).reduce(:+) # => 10
1.upto(5).reduce(:+) # => 15

(1..4).reduce(:+) # => 10
(1..5).reduce(:+) # => 15

# could use `each`,but it is doing nothing here.
(1..4).each.reduce(:+) # => 10
(1..5).each.reduce(:+) # => 15

# same thing with `each`,but keeping track of the sum manually
sum = 0
(1..4).each do |i|
  sum += i
end
# i => 10

基本上,您会得到一个Enumerable(迭代器/集合抽象),该枚举跨越您要枚举的内容。在我们的例子中,我们希望从1到4。我们可以通过调用Integer#upto方法(如1.upto(4)或使用Range(如{{1} }。然后我们可以在集合/迭代器上使用任何Enumerable方法。

(1..4)只需为每个元素调用一个块(当调用时不带任何块,本质上什么都不做,只是返回相同的Enumerable),但是Enumerable也具有内置函数来查找最小值,最大值,减少值(在我们的例子中,我们正在求和,所以Enumerable#each适合),等等。有关更多详细信息,请参阅Enumerable文档。

,

一个想到的例子。

def sum_nums(max)
  sum = 0
  array = Array.new(max) { |i| (i + 1) }
  array.each { |element| sum += element }
  puts sum
end

sum_nums(4) # => 10
sum_nums(5) # => 15

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。