【发布时间】:2019-12-24 05:35:51
【问题描述】:
例如,给定n,可能是1000000或100000000,找出来
0 ^ 1 ^ 2 ^ 3 ^ ... ^ n
有几种方法:
p (0..n).inject(:^)
p 0.upto(n).inject(:^)
p (n+1).times.inject(:^)
(在 Ruby 中还有其他常用方法吗?)在 Ruby 中循环遍历范围的常用方法中,哪些实际创建了一个数组,因此可能会导致大量内存使用? (作为要记住的一般规则)。
在 Mac 上,是否有办法在 Ruby 程序内部并使用操作系统来判断内存使用实际上是最小的(O(1) 空间)来验证没有创建实际的数组?
附:一种方法是使n 相当大,例如100000000,运行它,然后在另一个shell 中使用ps v 以查看内存处于低百分比(与使用(0..n).to_a.inject(:^) 运行程序相比),但是我不确定是否有更好的方法。
【问题讨论】:
-
一般来说,Ruby 不会创建数组,除非它真的必须这样做,请参阅stackoverflow.com/q/6487747/479863(大约是 1.9.2,但行为变得更糟的可能性很小)。
标签: arrays ruby memory iterator