Сортировка срезов
Используйте sort.Slice и вспомогательные средства
«Сортировка срезов» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Почему важна сортировка
Сортировка задаёт элементам определённый порядок. Стандартный пакет Go sort эффективно выполняет эту задачу.
В Go редко приходится писать собственный алгоритм сортировки. Вместо этого вызывайте вспомогательные функции, работающие со срезами.
Импорт пакета sort
Чтобы использовать пакет, импортируйте его с помощью import "sort". Он входит в стандартную библиотеку, поэтому скачивать дополнительные зависимости не нужно.
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println("sort imported")
_ = sort.IntsAreSorted([]int{1, 2, 3})
}Сортировка целых чисел
sort.Ints сортирует срез типа int по возрастанию непосредственно в нём. Исходный срез изменяется.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1, 9}
sort.Ints(nums)
fmt.Println(nums)
}Сортировка строк
sort.Strings сортирует срез строк в лексикографическом порядке (алфавитном, по порядку байтов).
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"banana", "apple", "cherry"}
sort.Strings(words)
fmt.Println(words)
}Сортировка чисел с плавающей точкой
sort.Float64s сортирует срез значений типа float64 по возрастанию.
package main
import (
"fmt"
"sort"
)
func main() {
values := []float64{3.2, 1.5, 2.8}
sort.Float64s(values)
fmt.Println(values)
}sort.Slice
sort.Slice сортирует любой срез с помощью предоставленной Вами функции сравнения. Функция принимает два индекса i и j и возвращает true, если элемент i должен находиться перед элементом j.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1}
sort.Slice(nums, func(i, j int) bool {
return nums[i] < nums[j]
})
fmt.Println(nums)
}Порядок по убыванию
Чтобы сортировать по убыванию, измените сравнение в функции сравнения: верните nums[i] > nums[j].
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1}
sort.Slice(nums, func(i, j int) bool {
return nums[i] > nums[j]
})
fmt.Println(nums)
}Сортировка структур
sort.Slice особенно удобен для структур. Вы сами выбираете поле, определяющее порядок.
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{{"Bob", 30}, {"Alice", 25}}
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println(people)
}Проверка сортировки
Вспомогательные функции, такие как sort.IntsAreSorted и sort.SliceIsSorted, возвращают true, если срез уже отсортирован, не изменяя его.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 2, 3}
fmt.Println(sort.IntsAreSorted(nums))
}Изменение на месте
Все эти функции сортируют непосредственно в исходном срезе. Они не возвращают новый срез. После вызова sort.Ints(s) сама переменная s переупорядочивается.
package main
import (
"fmt"
"sort"
)
func main() {
s := []int{3, 1, 2}
sort.Ints(s)
fmt.Println("s is now:", s)
}Выбор подходящей вспомогательной функции
Для простых срезов используйте типизированные вспомогательные функции (sort.Ints, sort.Strings, sort.Float64s). Выбирайте sort.Slice, когда нужно задать собственное правило или отсортировать структуры.
sort.Ints— целые числа по возрастаниюsort.Slice— любые данные, Ваше правило
Быстрая проверка
Что возвращает функция сравнения в sort.Slice?
Итоги
Вы научились сортировать с помощью пакета sort:
sort.Ints,sort.Strings,sort.Float64sдля типизированных срезовsort.Sliceс функцией сравнения для собственных правил и структур- Вся сортировка выполняется непосредственно в исходном срезе
Часто задаваемые вопросы
Урок «Сортировка срезов» бесплатный?
Да — полный текст урока «Сортировка срезов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сортировка срезов»?
Используйте sort.Slice и вспомогательные средства Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Сортировка срезов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сортировка срезов
- Пользовательский порядок сортировки
- Поиск в отсортированных данных
- Стабильная сортировка