Основы Go
2026-02-26 17:29 Diff

Сортировка — одна из самых распространённых операций над коллекциями. В Go для работы со срезами предусмотрены готовые функции в пакете slices, которые упрощают сортировку без необходимости писать собственные алгоритмы.

Сортировка по возрастанию

Для сортировки среза с элементами любого упорядоченного типа (например, int, string) используется функция slices.Sort():

Изменяется ли исходный срез?

Важно помнить, что slices.Sort() изменяет исходный срез на месте. После вызова slices.Sort(nums) срез nums будет отсортирован, а новый срез не создаётся. Если нужно получить новый отсортированный срез, используйте slices.Sorted(), которая возвращает копию с отсортированными элементами:

Проверка, отсортирован ли срез

Иногда нужно проверить, находится ли срез в порядке возрастания. Для этого есть slices.IsSorted():

Сортировка строк

Срез строк сортируется аналогично:

Сортировка выполняется в лексикографическом порядке (по Unicode-кодам символов).

Сортировка с пользовательской логикой

Если нужно задать собственное правило сортировки, можно использовать slices.SortFunc(). Например, сортировка строк по длине:

Функция-компаратор должна возвращать:

  • Отрицательное значение, если a < b,
  • Ноль, если a == b,
  • Положительное значение, если a > b.

Обратный порядок

Чтобы отсортировать в обратном порядке, можно:

  1. Отсортировать по возрастанию.
  2. Развернуть срез с помощью slices.Reverse().

Минимальные и максимальные значения

Пакет slices также предоставляет функции для нахождения минимального и максимального элементов:

Вывод

  • Функции slices.Sort() и slices.SortFunc() изменяют исходный срез.
  • Если нужен новый отсортированный срез, используйте slices.Sorted() или slices.Clone() перед сортировкой.
  • Для кастомных правил сортировки — slices.SortFunc().
  • Проверить порядок можно через slices.IsSorted().
  • Минимум и максимум вычисляются с помощью slices.Min() и slices.Max().