下面有一个函数,它为一个数组生成一组组合,其长度各不相同,由一个范围定义。我希望能够获得有关组合过程的数据,其中包括处理组合所需的时间。鉴于以下内容:
source = ("a".."z").to_a
range = 1..7
生成组合的命令是:
combinations = (range).flat_map do |size|
source.combination(size).to_a
end
此命令在我的机器上运行大约需要5秒钟,并生成971,711种组合。但是,当我尝试在函数的上下文中执行它时,在下面:
def combinations(source, range)
time_start = Time.now
combinations = (range).flat_map do |size|
source.combination(size).to_a
end
time_elapsed = (Time.now - time_start).round(1)
puts "Generated #{combinations.count} in #{time_elapsed} seconds."
return combinations
end
source = ("a".."z").to_a
range = 1..7
combinations(source, range)
该功能几乎立即输出:
Generated 971711 in 0.1 seconds.
...然后5秒钟后返回组合。这里发生了什么?如何计算处理组合所需的持续时间?
答案 0 :(得分:0)
当我在Ubuntu 12.04 32位机器上运行ruby 2.0.0p247上的代码时,我得到了输出:
Generated 971711 in 0.6 seconds.
然后程序立即退出。
由于程序中只有一行puts
,你的意思是“然后5秒后返回组合”?是否有更多代码没有向我们展示?你在运行什么红宝石翻译?什么操作系统?如果还没有,你能提供完整的代码吗?
如果您想进一步了解此问题,建议您尝试rblineprof或ruby-prof。
答案 1 :(得分:0)
所以看起来这里的问题是ruby需要大约5秒才能加载并显示IRB中的信息,但是“Y秒内生成的X”。信息实际上是正确和有效的。这比我预期的要少,因为我对计算组合所需的时间与加载和开始显示组合输出所需的时间之间的差异感到困惑。