Golang 中对切片或数组洗牌(译文)

6,715 阅读1分钟

作者:Stefan Nilsson

原文网址:yourbasic.org/golang/shuf…

math/rand 中的 rand.Shuffle 函数使用给定的交换函数对输入序列进行混洗。

a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] })

输出:

[5 8 6 4 3 7 2 1]

警告:如果不调用 rand.Seed,则每次运行程序时,您都会获得相同的伪随机数序列。

延伸阅读

Golang 中生成随机数,字符和切片元素(译文)

Go 1.10 之前

在包 math/rand 中使用 rand.Seedrand.Intn 函数。

a := []int{1, 2, 3, 4, 5, 6, 7, 8}
rand.Seed(time.Now().UnixNano())
for i := len(a) - 1; i > 0; i-- { // Fisher–Yates shuffle
    j := rand.Intn(i + 1)
    a[i], a[j] = a[j], a[i]
}

扫描下方二维码,关注Feed, 定期推送最新随笔

公众号 Feed 二维码