Shuffle a slice or array
yourbasic.org/golang
The rand.Shuffle
function
in package math/rand
shuffles an input sequence using a given swap function.
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]
Warning: Without the call to rand.Seed
you will get
the same sequence of pseudorandom numbers each time you run the program.
Further reading
Generate random numbers, characters and slice elements
Before Go 1.10
Use the rand.Seed
and
rand.Intn
functions in package
math/rand
.
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]
}