Функция rand.Shuffle
Функция rand.Shuffle перемешивает элементы слайса в случайном порядке. В первый параметр мы передаем количество элементов слайса, во второй параметр мы передаем функцию-обработчик, которая принимает два индекса и выполняет обмен элементов в заданном слайсе. Функция возвращает true в случае успешного выполнения операции перемешивания.
Синтаксис
rand.Shuffle(n, swap)
Пример
Давайте перемешаем слайс из пяти элементов в случайном порядке:
package main
import (
"fmt"
"math/rand"
)
func main() {
slice := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(slice), func(i, j int) {
slice[i], slice[j] = slice[j], slice[i]
})
fmt.Println(slice)
}
Результат выполнения кода будет случайным, например:
[3 1 5 2 4]
Пример
Перемешаем слайс из строк в случайном порядке:
package main
import (
"fmt"
"math/rand"
)
func main() {
words := []string{"a", "b", "c", "d", "e"}
rand.Shuffle(len(words), func(i, j int) {
words[i], words[j] = words[j], words[i]
})
fmt.Println(words)
}
Результат выполнения кода:
[d a e c b]
Пример
Используем функцию rand.Shuffle с пользовательской логикой обмена элементов:
package main
import (
"fmt"
"math/rand"
)
func main() {
slice := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(slice), func(i, j int) {
if slice[i]%2 == 0 && slice[j]%2 != 0 {
slice[i], slice[j] = slice[j], slice[i]
}
})
fmt.Println(slice)
}
Результат выполнения кода будет зависеть от случайного распределения:
[1 3 2 4 5]
Смотрите также
-
функцию
rand.Perm,
которая возвращает перестановку чисел от 0 до n-1 -
функцию
rand.Intn,
которая возвращает случайное целое число от 0 до n-1 -
функцию
rand.Float64,
которая возвращает случайное число с плавающей точкой -
функцию
rand.New,
которая создает новый генератор случайных чисел