我在下面有一个函数,它为一个数组生成一组组合,长度不同,由一个范围定义。我希望能够获得有关组合过程的数据,其中包括处理组合所需的时间。鉴于以下情况:
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 秒后返回组合。这里发生了什么?以及如何计算处理组合所需的持续时间?