Was ist der beste Weg, um schnell einen langen String in Rubin zu erzeugen? Das funktioniert, ist aber sehr langsam:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
Mir ist auch aufgefallen, dass das Erstellen einer Zeichenfolge mit einer anständigen Länge und das anschließende Anhängen dieser Zeichenfolge an eine vorhandene Zeichenfolge bis zur gewünschten Länge viel schneller funktioniert:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
Irgendwelche anderen Vorschläge?
Antworten:
quelle
str = "0" * 999999
;)99999 * "0"
bekomme, bekomme ichTypeError: String can't be coerced into Fixnum
"0" * 999999
wird behandelt,"0".*(999999)
wo*
sich eine Methode in derString
Klasse befindet. Diese Methode akzeptiert Zahlen als gültige Argumente, um eine Zeichenfolgenreplikation durchzuführen. Wenn Sie den Ausdruck umkehren, erhalten wir999999.*("0")
. Jetzt sprechen wir über die*
Methode in derFixNum
Klasse, und diese Methode weigert sich, Zeichenfolgen als Argumente zu verwenden. Es könnte sicherlich (zum Beispiel automatisch bemüht sein, das Argument in ein FixNum umzuwandeln), aber die Sprachdesigner entschieden sich dagegen, Rubys Perlish-Inspirationen zu vollständig zu akzeptieren.Eine andere relativ schnelle Option ist
Obwohl Benchmarking
Zeigt, dass die Multiplikation immer noch schneller ist
quelle