РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
345 of 1593 menu

Функция 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,
    которая создает новый генератор случайных чисел
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить