У меня есть функция, ниже которой генерируется набор комбинаций для массива на разных длинах, определенных диапазоном. Я хотел бы получить данные о процессе объединения, который будет включать время, необходимое для обработки комбинаций. Учитывая следующее:Как вычислить продолжительность функции объединения массива в Ruby
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 секунд возвращает комбинации. Что тут происходит? И как я могу рассчитать продолжительность времени, необходимого для обработки комбинаций?
попробуйте 'combination.to_a' в области с часами. Может быть, он ленив из-за бесконечных диапазонов? –