2010-02-19 10 views
102

Qual è il modo migliore per generare rapidamente una stringa lunga in ruby? Questo funziona, ma è molto lento:In Ruby come faccio a generare una lunga stringa di testo ripetuto?

str = "" 
length = 100000 
(1..length).each {|i| str += "0"} 

Ho anche notato che la creazione di una stringa di lunghezza decente e poi aggiungendo che ad una stringa esistente fino alla lunghezza desiderata funziona molto più veloce:

str = "" 
incrementor = "" 
length = 100000 
(1..1000).each {|i| incrementor += "0"} 
(1..100).each {|i| str += incrementor} 

Qualche altro suggerimento?

+1

Il b Il modo migliore sarebbe usare JRuby e usare StringBuffer. Oooooh. –

risposta

230
str = "0" * 999999 
+37

lolwut? Ruby è strano. +1 – you786

+2

Classic ruby ​​haha ​​ – amrcus

+8

Davvero, molto strano, guarda come appare in Python un aspetto diverso ed elegante: 'str =" 0 "* 999999';) – tokland

10

Un'altra opzione è relativamente veloce

str = '%0999999d' % 0 

Anche se l'analisi comparativa

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

Indica che la moltiplicazione è ancora più veloce

   user  system  total  real 
format : 0.300000 0.080000 0.380000 ( 0.405345) 
multiply: 0.080000 0.080000 0.160000 ( 0.172504) 
+0

Mi piace questa risposta, ma non riesco a farlo funzionare per qualcosa di diverso da "0". Cosa devo fare se voglio 100 r? – yourdeveloperfriend

+2

Non funzionerà con altri simboli perché sfrutta il riempimento del numero nelle stringhe di formato. I numeri possono essere riempiti con 0 davanti o dietro (per i decimali) senza cambiare il valore, i r non funzionano così. –

-5
999999999999999999.times{ 
print "0" 
} 
+0

Questo stampa l'output. La domanda riguardava la generazione della stringa stessa. – onnimonni

Problemi correlati