Ruby 可枚举中减少的限制?

Posted

技术标签:

【中文标题】Ruby 可枚举中减少的限制?【英文标题】:Limitation of reduce in Ruby enumberable? 【发布时间】:2015-06-16 20:10:18 【问题描述】:

我正在尝试解决 Project Euler 的问题 5。我正在使用 .reduce(:+) 方法,它似乎适用于最长 16 长的数组。然后,当我尝试为答案传递任何更大的值 (20) 时,它永远不会计算我的最终值。

require 'pp'
pp factors = (1..20).to_a
n = 1

result = []
loop do
  factors.each  |x| result << n % x 
  if result.reduce(:+) == 0
        break
  else
        result = []
  end
  n += 1
end
pp n

【问题讨论】:

能不能给我们讲讲欧拉项目的问题5? 问题是“能被 1 到 20 的所有数整除的最小偶正数是多少”? 【参考方案1】:

原来你可以用 Integer#lcm 解决这个问题。是的。也在一行中。

(1..20).to_a.reduce(:lcm)

【讨论】:

建议更好的方法很有帮助,但只有在您或其他人回答了 OP 的问题之后。【参考方案2】:

我用 array.inject(:+) 并且永远不会遇到数组长度的任何问题。将对欧拉的其余部分非常有帮助!它也可以直接作用于范围,因此您无需调用 .to_a:

(1..20).inject(:+) --> 210

http://ruby-doc.org/core-2.2.1/Enumerable.html

【讨论】:

【参考方案3】:

对于标题的问题,reduce有没有限制?

没有直接限制,它仅受阵列所需的计算机内存量的限制。正常整数溢出时会自动使用 BigNum 类。

例如,

 (1..10000000).to_a.reduce(:+)
=> 50000005000000
50000005000000.class
=> Bignum

所以需要有另一个问题,或者是因为数字和运行时间变得非常大,直到你的循环终止。

【讨论】:

以上是关于Ruby 可枚举中减少的限制?的主要内容,如果未能解决你的问题,请参考以下文章

ruby 可枚举的每个和地图

Ruby 可枚举块变量赋值

如何按此哈希数组进行分组(可枚举)[Ruby,Rails]

如何创建无限可枚举的Times?

枚举类的用法

java学习笔记:枚举值