【发布时间】:2015-10-12 12:50:32
【问题描述】:
我有一个 for 循环,我希望它永远递增。
我的代码:
for a in (0...Float::INFINITY).step(2)
puts a
end
输出:
0.0
2.0
4.0
Etc. Always with "#{a}.0"
有没有什么办法可以将无穷大表示为整数,这样输出的末尾就没有.0,而不会对循环的内容进行任何操作?
附录
您能否解释一下您的循环是如何工作的?我正在尝试找到最有效的解决方案,因为由于这个循环将无限迭代,因此减少几毫秒将大大提高性能。
还有……
我会接受以最短时间运行到 1000000 的解决方案
根据 benchmark@Sefan 和 while 循环答案花费相同的时间Fruity while 循环答案需要更短的时间,for在第二个循环答案,但多个loop do 答案需要更长的时间。
由于原因超出了这个问题的范围,我创建了另一个问题来解决为什么某些循环比其他循环更快 (https://stackoverflow.com/questions/33088764/peddle-to-the-metal-faster-loop-faster)。
【问题讨论】:
-
“[S]因为这个循环将无限迭代,所以减少几毫秒将大大提高性能”——我不明白。一个无限的过程永远不会结束。每次迭代的性能差异不会产生任何影响。
-
@sawa 这是我的代码的一个非常简化的版本,我正在尝试检查循环达到的每个数字是否具有特定特征,并且我希望循环尽快检查数字。因此,如果检查每个数字所需的时间减少一毫秒,那么在检查 100 万个数字后,它将节省一秒,它将检查数万亿个数字。
-
@sawa 它将在某个时候终止。没有实际运行无限循环的循环,因为出于所有意图和目的,任何无限循环都将被终止。
-
@shivam 的答案是一个 while 循环,因此您的更新没有多大意义。至于 Stefan 的回答,我在回答中解释了其中的原因。
-
@engineersmnky 对不起!我不是说
while循环答案,我的意思是loop do答案。现在编辑。感谢您了解这一点。
标签: ruby loops optimization