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

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • williamfitzsimmons

    williamfitzs

    14 Mart 2008