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

Функция slices.SortStableFunc

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

Синтаксис

slices.SortStableFunc(slice, func(a, b T) int { // negative if a < b, zero if a == b, positive if a > b })

Пример

Давайте отсортируем слайс чисел с помощью пользовательской функции, которая сортирует по абсолютному значению:

package main import ( "fmt" "slices" ) func main() { nums := []int{-5, 3, -2, 8, -1, 0} slices.SortStableFunc(nums, func(a, b int) int { absA := a if absA < 0 { absA = -absA } absB := b if absB < 0 { absB = -absB } return absA - absB }) fmt.Println(nums) }

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

[0 -1 -2 3 -5 8]

Пример

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

package main import ( "fmt" "slices" ) func main() { words := []string{"apple", "kiwi", "banana", "pear", "grape"} slices.SortStableFunc(words, func(a, b string) int { return len(a) - len(b) }) fmt.Println(words) }

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

[kiwi pear apple grape banana]

Пример

Сортировка слайса структур по нескольким полям с сохранением порядка:

package main import ( "fmt" "slices" ) type Person struct { Name string Age int } func main() { people := []Person{ {"Alice", 30}, {"Bob", 25}, {"Charlie", 30}, {"Diana", 25}, } slices.SortStableFunc(people, func(a, b Person) int { if a.Age != b.Age { return a.Age - b.Age } if a.Name < b.Name { return -1 } if a.Name > b.Name { return 1 } return 0 }) fmt.Println(people) }

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

[{Bob 25} {Diana 25} {Alice 30} {Charlie 30}]

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

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