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

Интерфейс sort.Interface

Интерфейс sort.Interface предназначен для реализации алгоритмов сортировки пользовательских коллекций. Он содержит три метода, которые необходимо реализовать для любого типа, который вы хотите сортировать с помощью пакета sort.

Методы интерфейса

type Interface interface { Len() int Less(i, j int) bool Swap(i, j int) }

Метод Len возвращает количество элементов в коллекции. Метод Less определяет, должен ли элемент с индексом i находиться перед элементом с индексом j. Метод Swap меняет местами элементы с индексами i и j.

Пример

Создадим пользовательский тип Person и реализуем сортировку по возрасту:

package main import ( "fmt" "sort" ) type Person struct { Name string Age int } type ByAge []Person func (a ByAge) Len() int { return len(a) } func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age } func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func main() { people := []Person{ {"Alice", 30}, {"Bob", 25}, {"Charlie", 35}, } sort.Sort(ByAge(people)) fmt.Println(people) }

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

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

Пример

Реализуем сортировку по имени (в алфавитном порядке):

package main import ( "fmt" "sort" ) type Person struct { Name string Age int } type ByName []Person func (a ByName) Len() int { return len(a) } func (a ByName) Less(i, j int) bool { return a[i].Name < a[j].Name } func (a ByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func main() { people := []Person{ {"Charlie", 35}, {"Alice", 30}, {"Bob", 25}, } sort.Sort(ByName(people)) fmt.Println(people) }

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

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

Пример

Обратная сортировка с использованием sort.Reverse:

package main import ( "fmt" "sort" ) type Person struct { Name string Age int } type ByAge []Person func (a ByAge) Len() int { return len(a) } func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age } func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func main() { people := []Person{ {"Alice", 30}, {"Bob", 25}, {"Charlie", 35}, } sort.Sort(sort.Reverse(ByAge(people))) fmt.Println(people) }

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

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

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

  • функцию sort.Sort,
    которая выполняет сортировку через интерфейс sort.Interface
  • функцию sort.Stable,
    которая выполняет стабильную сортировку
  • функцию sort.IsSorted,
    которая проверяет, отсортирована ли коллекция
  • функцию sort.Reverse,
    которая меняет порядок сортировки на обратный
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить