Quelle est la meilleure façon de générer rapidement une longue chaîne en rubis? Cela fonctionne, mais est très lent:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
J'ai également remarqué que créer une chaîne d'une longueur décente, puis l'ajouter à une chaîne existante jusqu'à la longueur souhaitée fonctionne beaucoup plus rapidement:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
D'autres suggestions?
Réponses:
la source
str = "0" * 999999
99999 * "0"
reçoisTypeError: String can't be coerced into Fixnum
"0" * 999999
est traité comme"0".*(999999)
où se*
trouve une méthode dans laString
classe. Cette méthode accepte les nombres comme arguments valides pour effectuer la réplication de chaînes. Lorsque vous inversez l'expression, nous obtenons999999.*("0")
. Maintenant, nous parlons de la*
méthode dans laFixNum
classe, et cette méthode refuse de prendre des chaînes comme arguments. Cela pourrait certainement (par exemple, faire automatiquement de son mieux pour convertir l'argument en un FixNum) mais les concepteurs de langage ont décidé de ne pas adopter trop complètement les inspirations de Ruby's Perlish.Une autre option relativement rapide est
Bien que l'analyse comparative
Montre que la multiplication est encore plus rapide
la source