Функция sort.Sort
Функция sort.Sort сортирует элементы слайса, который реализует интерфейс sort.Interface.
В первый параметр она принимает значение типа sort.Interface, которое должно определять три метода:
Len для получения длины слайса, Less для сравнения двух элементов по индексам и Swap для обмена элементов местами.
Функция сортирует слайс по возрастанию согласно условию, заданному в методе Less.
Синтаксис
sort.Sort(data sort.Interface)
Пример с сортировкой числового слайса
Давайте отсортируем слайс чисел []int{5, 2, 8, 1, 9}
по возрастанию, используя тип sort.IntSlice, который уже реализует интерфейс sort.Interface:
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1, 9}
sort.Sort(sort.IntSlice(nums))
fmt.Println(nums)
}
Результат выполнения кода:
[1 2 5 8 9]
Пример с сортировкой строкового слайса
Рассмотрим сортировку слайса строк []string{"e", "b", "d", "a", "c"}
в алфавитном порядке с помощью sort.StringSlice:
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"e", "b", "d", "a", "c"}
sort.Sort(sort.StringSlice(words))
fmt.Println(words)
}
Результат выполнения кода:
[a b c d e]
Сортировка пользовательской структуры
Давайте отсортируем слайс структур Person по возрасту,
реализовав интерфейс sort.Interface для пользовательского типа:
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}]
Сортировка в обратном порядке
Для сортировки в обратном порядке используйте sort.Reverse
вместе с sort.Sort:
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1, 9}
sort.Sort(sort.Reverse(sort.IntSlice(nums)))
fmt.Println(nums)
}
Результат выполнения кода:
[9 8 5 2 1]
Смотрите также
-
функцию
sort.Ints,
которая сортирует слайс чисел по возрастанию -
функцию
sort.Strings,
которая сортирует слайс строк по алфавиту -
функцию
sort.Stable,
которая выполняет устойчивую сортировку -
функцию
sort.IsSorted,
которая проверяет, отсортирован ли слайс