Функция rand.Shuffle

Функция rand.Shuffle перемешивает элементы слайса в случайном порядке. В первый параметр мы передаем количество элементов слайса, во второй параметр мы передаем функцию-обработчик, которая принимает два индекса и выполняет обмен элементов в заданном слайсе. Функция возвращает true в случае успешного выполнения операции перемешивания.

Синтаксис

gorand.Shuffle(n, swap)

Пример

Давайте перемешаем слайс из пяти элементов в случайном порядке:

gopackage 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)
}

Результат выполнения кода будет случайным, например:

go[3 1 5 2 4]

Пример

Перемешаем слайс из строк в случайном порядке:

gopackage 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)
}

Результат выполнения кода:

go[d a e c b]

Пример

Используем функцию rand.Shuffle с пользовательской логикой обмена элементов:

gopackage 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)
}

Результат выполнения кода будет зависеть от случайного распределения:

go[1 3 2 4 5]

Смотрите также

  • функцию rand.Perm,
    которая возвращает перестановку чисел от 0 до n-1
  • функцию rand.Intn,
    которая возвращает случайное целое число от 0 до n-1
  • функцию rand.Float64,
    которая возвращает случайное число с плавающей точкой
  • функцию rand.New,
    которая создает новый генератор случайных чисел