¿Cuál es la mejor manera de generar una cadena larga rápidamente en ruby? Esto funciona, pero es muy lento:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
También he notado que crear una cadena de una longitud decente y luego agregarla a una cadena existente hasta la longitud deseada funciona mucho más rápido:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
¿Cualquier otra sugerencia?
Respuestas:
fuente
str = "0" * 999999
99999 * "0"
me saleTypeError: String can't be coerced into Fixnum
"0" * 999999
se trata como"0".*(999999)
donde*
es un método en elString
clase. Ese método acepta números como argumentos válidos para realizar la replicación de cadenas. Cuando inviertes la expresión, obtenemos999999.*("0")
. Ahora estamos hablando del*
método en laFixNum
clase, y ese método se niega a tomar cadenas como argumentos. Ciertamente podría (por ejemplo, automáticamente haciendo un mejor esfuerzo para convertir el argumento en un FixNum), pero los diseñadores del lenguaje decidieron no aceptar las inspiraciones de Ruby's Perlish demasiado completamente.Otra opción relativamente rápida es
Aunque el benchmarking
Muestra que la multiplicación es aún más rápida.
fuente