【问题标题】:Can I use the .each Method to Solve this sum problem?我可以使用 .each 方法来解决这个总和问题吗?
【发布时间】:2021-01-16 16:23:09
【问题描述】:

对于 Ruby 来说还是个新手。菜鸟问题,请多多包涵。并提前感谢您。 我喜欢 .each 方法而不是 while 循环之类的方法。 while 循环让我感到困惑。我喜欢 .each 方法的简洁性。我可以使用 .each 方法来解决下面的这个问题吗?我正在努力弄清楚我是否可以使用这种样式循环。

感谢您的帮助!

 def sum_nums(max)



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

【问题讨论】:

  • 我不太明白你的问题,但如果你需要计算算术级数,你可以使用(1..5).reduce(:+)
  • @AndreiKovrov 或 (1..5).sum 使用较新的红宝石。
  • 对于@mu 的评论,(1..5).sum 从范围的端点计算算术级数的总和:5*(1+5)/2 #=> 15
  • ...以及范围的大小(我的示例中的第一个 '5')。

标签: ruby sum each


【解决方案1】:

我想到的一个例子。

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

【讨论】:

    【解决方案2】:

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

    def sum_nums(n)
      (1..n).sum
    end
    
    puts sum_nums(5)
    # => 15
    

    【讨论】:

      【解决方案3】:

      是的,您可以使用 .each 方法来解决这个问题。然而,拔毛不是办法。尝试在 each- 块之外将变量初始化为 0,并将块中的所有值添加到该变量。

      【讨论】:

        【解决方案4】:

        以下是一些关于如何在 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..4))来获得一个 Enumerable。然后我们可以在集合/迭代器上使用任何 Enumerable 方法。

        Enumerable#each 只是为每个元素调用一个块(当没有块调用时,基本上什么都不做,只返回相同的 Enumerable),但 Enumerable 还具有用于查找最小值、最大值、减少的内置函数(在我们的如果我们正在求和,所以 reduce 适合)等。有关更多详细信息,请参阅 Enumerable 的文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-24
          • 1970-01-01
          • 2011-07-16
          • 2020-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-07
          相关资源
          最近更新 更多