Qual é a melhor maneira de gerar uma cadeia longa rapidamente em ruby? Isso funciona, mas é muito lento:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
Também notei que criar uma sequência de tamanho decente e anexá-la a uma sequência existente até o comprimento desejado funciona muito mais rápido:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
Alguma outra sugestão?
Respostas:
fonte
str = "0" * 999999
;)99999 * "0"
receboTypeError: String can't be coerced into Fixnum
"0" * 999999
é tratado como"0".*(999999)
onde*
é um método naString
classe. Esse método aceita números como argumentos válidos para executar a replicação de string. Quando você inverte a expressão, nós obtemos999999.*("0")
. Agora, estamos falando sobre o*
método naFixNum
classe, e esse método se recusa a aceitar seqüências de caracteres como argumentos. Certamente poderia (por exemplo, fazer o melhor esforço possível para converter o argumento em um FixNum), mas os designers de linguagem decidiram não adotar totalmente as inspirações de Ruby Perlish.Outra opção relativamente rápida é
Embora o benchmarking
Mostra que a multiplicação ainda é mais rápida
fonte