Функция slices.SortFunc

Функция slices.SortFunc сортирует элементы слайса в порядке возрастания, используя предоставленную функцию сравнения. Первым параметром функция принимает слайс для сортировки, вторым — функцию сравнения cmp, которая должна возвращать отрицательное число, если первый элемент меньше второго, положительное, если больше, и ноль при равенстве. Функция изменяет исходный слайс и не возвращает нового значения.

Синтаксис

goslices.SortFunc(slice, func(a, b T) int {
  // возвращаем -1, 0 или 1
})

Пример

Отсортируем слайс целых чисел по возрастанию с помощью пользовательской функции:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  nums := []int{5, 2, 8, 1, 3}
  slices.SortFunc(nums, func(a, b int) int {
    return a - b
  })
  fmt.Println(nums)
}

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

go[1 2 3 5 8]

Пример

Отсортируем слайс строк по длине (от коротких к длинным):

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  words := []string{"a", "abc", "ab", "abcd"}
  slices.SortFunc(words, func(a, b string) int {
    return len(a) - len(b)
  })
  fmt.Println(words)
}

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

go[a ab abc abcd]

Пример

Отсортируем слайс структур по полю Age в порядке убывания:

gopackage main

import (
  "fmt"
  "slices"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  people := []Person{
    {"Alice", 30},
    {"Bob", 25},
    {"Charlie", 35},
  }
  slices.SortFunc(people, func(a, b Person) int {
    return b.Age - a.Age
  })
  fmt.Println(people)
}

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

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

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

  • функцию slices.Sort,
    которая сортирует слайс с использованием стандартного сравнения
  • функцию slices.SortStableFunc,
    которая выполняет стабильную сортировку с пользовательской функцией
  • функцию slices.IsSortedFunc,
    которая проверяет, отсортирован ли слайс по заданному правилу
  • функцию slices.Reverse,
    которая разворачивает порядок элементов в слайсе