我正在尝试在 Go 中实现一个字符串随机播放函数,它使用加密/兰特而不是数学/兰特。在费雪耶茨洗牌需要随机整数,所以我一直在努力,实现该功能,而无需使用密码/兰特诠释依赖于数学/大。以下是我目前想到的最好的方法,但有没有更好的方法?我找不到现有示例的事实让我想知道为什么没有人这样做是有充分理由的!
package main
import "crypto/rand"
import "fmt"
import "encoding/binary"
func randomInt(max int) int {
var n uint16
binary.Read(rand.Reader, binary.LittleEndian, &n)
return int(n) % max
}
func shuffle(s *[]string) {
slice := *s
for i := range slice {
j := randomInt(i + 1)
slice[i], slice[j] = slice[j], slice[i]
}
*s = slice
}
func main() {
slice := []string{"a", "b", "c", "d", "e", "f", "h", "i", "j", "k"}
shuffle(&slice)
fmt.Println(slice)
}
慕尼黑8549860
FFIVE
qq_花开花谢_0
相关分类