Интересно.
Обычное правило производительности Ruby: если программа использует встроенные операции, она будет быстрой. Если этого не произойдет, это будет медленно.
Даже если ваша вторая версия может выполнять или не выполнять меньшее преобразование, она выполняет три строки Ruby против одной.
Однажды я прочитал большой лог-файл. В моей первой версии я держал эффективный связанный список строк, используя код Ruby.
1. Сложность времени: O (1).
Затем я изменил его, чтобы использовать <<
и прикрепить каждый новый узел к концу массива.
2. Сложность времени: O (N 2 ) или не менее O (N 1 + ε )
Вторая версия (1) была быстрее.
1. Очевидно, что реализация расширяла массив порциями, поэтому он не был полностью квадратичным, но все же выполнял намного больше работы, чем связанный список.