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

Функция sort.Stable

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

Синтаксис

sort.Stable(slice, func(i, j int) bool)

Пример

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

package main import ( "fmt" "sort" ) func main() { words := []string{"a", "bb", "ccc", "dd", "e", "fff"} sort.Stable(words, func(i, j int) bool { return len(words[i]) < len(words[j]) }) fmt.Println(words) }

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

[a e bb dd ccc fff]

Обратите внимание, что элементы "a" и "e", а также "bb" и "dd" сохранили свой исходный порядок.

Пример

Давайте сравним поведение sort.Slice и sort.Stable на примере сортировки чисел по четности:

package main import ( "fmt" "sort" ) func main() { numbers := []int{3, 1, 4, 2, 5, 6} sort.Stable(numbers, func(i, j int) bool { return numbers[i]%2 == 0 && numbers[j]%2 != 0 }) fmt.Println(numbers) }

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

[4 2 6 3 1 5]

Все четные числа переместились в начало, сохранив свой исходный порядок (4, 2, 6).

Пример

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

package main import ( "fmt" "sort" ) type Person struct { Name string Age int } func main() { people := []Person{ {"Alice", 25}, {"Bob", 30}, {"Charlie", 25}, {"David", 30}, {"Eve", 20}, } sort.Stable(people, func(i, j int) bool { return people[i].Age < people[j].Age }) fmt.Println(people) }

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

[{Eve 20} {Alice 25} {Charlie 25} {Bob 30} {David 30}]

Люди с одинаковым возрастом сохранили свой относительный порядок из исходного слайса.

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

  • функцию sort.Slice,
    которая выполняет нестабильную сортировку слайса
  • функцию sort.SliceStable,
    которая является алиасом для sort.Stable
  • функцию sort.SliceIsSorted,
    которая проверяет, отсортирован ли слайс
  • функцию slices.SortStableFunc,
    которая выполняет стабильную сортировку с использованием функций из пакета slices
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить