1.10 Go, resmi bir Fisher-Yates karıştırma işlevi içerir.
Dokümantasyon: pkg/math/rand/#Shuffle
math / rand: Karışık ekle
Shuffle, Fisher-Yates algoritmasını kullanır.
Bu yeni API olduğu için, bize Int31n
çoğunlukla bölünmeyi engelleyen çok daha hızlı bir uygulama kullanma fırsatı veriyor .
Sonuç olarak, ayrı bir başlatma döngüsü gerektirmesine ve öğeleri değiştirmek için işlev çağrıları kullanmasına rağmen BenchmarkPerm30ViaShuffle
, yaklaşık% 30 daha hızlıdır BenchmarkPerm30
.
Ayrıca bkz. Orijinal CL 51891
İlk olarak yorumladı tarafından Shelll :
Rastgele tohumlamayı unutma, yoksa her zaman aynı sırayı alırsın.
Örneğinrand.Seed(time.Now().UnixNano()
Misal:
words := strings.Fields("ink runs from the corners of my mouth")
rand.Shuffle(len(words), func(i, j int) {
words[i], words[j] = words[j], words[i]
})
fmt.Println(words)