Функция sort.Slice

Функция sort.Slice сортирует срез с использованием пользовательской функции сравнения. Она принимает два параметра: первый параметр - срез, который нужно отсортировать, второй параметр - функцию сравнения, которая должна возвращать true, если элемент с индексом i должен располагаться перед элементом с индексом j. Сортировка не является устойчивой: порядок равных элементов может измениться.

Синтаксис

gosort.Slice(slice, func(i, j int) bool {
  return slice[i] < slice[j]
})

Пример

Давайте отсортируем срез строк по возрастанию:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  slice := []string{"a", "c", "b", "e", "d"}
  sort.Slice(slice, func(i, j int) bool {
    return slice[i] < slice[j]
  })
  fmt.Println(slice)
}

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

go[a b c d e]

Пример

Давайте отсортируем срез чисел по убыванию:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  slice := []int{1, 5, 3, 4, 2}
  sort.Slice(slice, func(i, j int) bool {
    return slice[i] > slice[j]
  })
  fmt.Println(slice)
}

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

go[5 4 3 2 1]

Пример

Давайте отсортируем срез структур по возрасту:

gopackage main

import (
  "fmt"
  "sort"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  people := []Person{
    {"Alice", 30},
    {"Bob", 25},
    {"Charlie", 35},
  }
  sort.Slice(people, func(i, j int) bool {
    return people[i].Age < people[j].Age
  })
  fmt.Println(people)
}

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

go[{Bob 25} {Alice 30} {Charlie 35}]

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

  • функцию sort.SliceStable,
    которая выполняет устойчивую сортировку среза
  • функцию sort.Ints,
    которая сортирует срез целых чисел
  • функцию sort.Strings,
    которая сортирует срез строк
  • функцию sort.SliceIsSorted,
    которая проверяет, отсортирован ли срез по заданному правилу