Apa cara terbaik untuk menghasilkan string panjang dengan cepat di ruby? Ini berfungsi, tetapi sangat lambat:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
Saya juga memperhatikan bahwa membuat string dengan panjang yang layak dan kemudian menambahkannya ke string yang ada hingga panjang yang diinginkan bekerja lebih cepat:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
Ada saran lain?
Jawaban:
str = "0" * 999999
sumber
str = "0" * 999999
99999 * "0"
saya mendapatkanTypeError: String can't be coerced into Fixnum
"0" * 999999
diperlakukan sebagai"0".*(999999)
mana*
adalah metode dalamString
kelas. Metode itu menerima angka sebagai argumen yang valid untuk melakukan replikasi string. Saat Anda membalikkan ekspresi, kami mengerti999999.*("0")
. Sekarang kita berbicara tentang*
metode diFixNum
kelas, dan metode itu menolak untuk mengambil string sebagai argumen. Itu pasti bisa (misalnya, secara otomatis melakukan upaya terbaik untuk mengubah argumen menjadi FixNum) tetapi perancang bahasa memutuskan untuk tidak terlalu sepenuhnya merangkul inspirasi Ruby Perlish.Opsi lain yang relatif cepat adalah
str = '%0999999d' % 0
Meskipun melakukan benchmarking
require 'benchmark' Benchmark.bm(9) do |x| x.report('format :') { '%099999999d' % 0 } x.report('multiply:') { '0' * 99999999 } end
Menunjukkan bahwa perkalian masih lebih cepat
user system total real format : 0.300000 0.080000 0.380000 ( 0.405345) multiply: 0.080000 0.080000 0.160000 ( 0.172504)
sumber