web-dev-qa-db-fra.com

Dans Ruby, comment générer une longue chaîne de texte répété?)

Quel est le meilleur moyen 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 convenable 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?

130
Markus Orrelly
str = "0" * 999999
291
FMc

Une autre option relativement rapide est

str = '%0999999d' % 0

Bien que l'analyse comparative

require 'benchmark'
Benchmark.bm(9)  do |x|
  x.report('format  :') { '%099999999d' % 0 }
  x.report('multiply:') { '0' * 99999999 }
end

Montre que la multiplication est encore plus rapide

               user     system      total        real
format  :  0.300000   0.080000   0.380000 (  0.405345)
multiply:  0.080000   0.080000   0.160000 (  0.172504)
11
rampion