SORU
7 EYLÜL 2012, Cuma


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
7 EYLÜL 2012, Cuma


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)
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChannelRichard

    ChannelRicha

    7 Kasım 2008
  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • FrankJavCee

    FrankJavCee

    29 Kasım 2008