golang rastgele nasıl tohum için doğru sayısı
Gidip rastgele bir dize oluşturmak için çalışıyorum ve şu ana kadar yazdığım kod
package main
import (
"bytes"
"fmt"
"math/rand"
"time"
)
func main() {
fmt.Println(randomString(10))
}
func randomString(l int) string {
var result bytes.Buffer
var temp string
for i := 0; i < l; {
if string(randInt(65, 90)) != temp {
temp = string(randInt(65, 90))
result.WriteString(temp)
i
}
}
return result.String()
}
func randInt(min int, max int) int {
rand.Seed(time.Now().UTC().UnixNano())
return min rand.Intn(max-min)
}
Benim uygulama çok yavaş. Ekim time
kullanarak döngü tekrar ve tekrar yineler bu yüzden belirli bir süre için aynı rasgele sayı getiriyor. Nasıl benim kod geliştirebilirim?
CEVAP
Her zaman aynı tohum ayarlamak için aynı işlemi. Eğer hızlı bir döngü içinde zaman tohum ayarı eğer tabii ki, muhtemelen aynı tohum birçok kez onu ararsın.
Farklı bir değer kadar randInt
işlevi aradığınız gibi bir durumda, zaman Nano tarafından döndürülen olarak değişmesini bekliyorum.
As for all random libraries ve, özellikle, verilen bir dizi üretmek için gerekli olmadıkça programınızı başlatırken tohum sadece bir kez, örneğin ayarlamak için genellikle hata ayıklama için yapılır).
Bundan sonra sadece Intn
sonraki rasgele tamsayı almak için arayın.
Ana başlangıç için randİnt fonksiyonu rand.Seed( time.Now().UTC().UnixNano())
hattı hareket ve her şey daha hızlı olacak.
Not ayrıca, bir dize bina basitleştirebilirsiniz düşünüyorum :
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed( time.Now().UTC().UnixNano())
fmt.Println(randomString(10) )
}
func randomString(l int ) string {
bytes := make([]byte, l)
for i:=0 ; i<l ; i {
bytes[i] = byte(randInt(65,90))
}
return string(bytes)
}
func randInt(min int, max int) int {
return min rand.Intn(max-min)
}
Nasıl pi benim hesaplama doğru olup ol...
Nasıl Ruby rastgele bir sayı almak içi...
Nasıl en iyi Ruby rastgele bir dize ol...
Nasıl VS2013 başvuru sayısı, gizlemek ...
Nasıl gıt sayısı işlemek için?...