原文
在此
由于Go没有为slice提供shuffle函数,所以需要自己想办法。由于我只需要随机一次遍历1 -> N,所以这段code最匹配。
func main() {
vals := []int{10, 12, 14, 16, 18, 20}
r := rand.New(rand.NewSource(time.Now().Unix()))
for _, i := range r.Perm(len(vals)) {
val := vals[i]
fmt.Println(val)
}
}
似乎go不像scala有那种惰性求值的特性,所以这里的r.Perm()还是产生了一个slice,如果N很大可能是个问题。