Тип sort.IntSlice
Тип sort.IntSlice представляет собой срез целых чисел
([]int), который реализует интерфейс sort.Interface.
Это позволяет использовать его с функциями пакета sort.
Основное преимущество типа sort.IntSlice заключается в том,
что он предоставляет удобные методы для сортировки и поиска
без необходимости писать дополнительный код для сравнения
элементов.
При преобразовании среза целых чисел в тип sort.IntSlice,
вы получаете доступ к методам Sort, Search
и Len, Less, Swap.
Синтаксис
Тип sort.IntSlice определяется как срез целых чисел.
Для его использования необходимо преобразовать ваш срез
в этот тип:
type IntSlice []int
Основные методы типа:
func (x IntSlice) Sort()
func (x IntSlice) Search(x int) int
func (x IntSlice) Len() int
func (x IntSlice) Less(i, j int) bool
func (x IntSlice) Swap(i, j int)
Метод Sort для сортировки среза
Метод Sort сортирует срез целых чисел в порядке
возрастания. Сортировка выполняется на месте, то есть
исходный срез изменяется.
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{5, 2, 8, 1, 9, 3}
sorted := sort.IntSlice(numbers)
sorted.Sort()
fmt.Println(numbers)
}
Результат выполнения кода:
[1 2 3 5 8 9]
Метод Search для двоичного поиска
Метод Search выполняет двоичный поиск элемента
в отсортированном срезе и возвращает индекс, по которому
находится искомое значение. Если значение не найдено,
возвращается индекс, куда его можно вставить для
сохранения порядка.
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{1, 3, 5, 7, 9}
slice := sort.IntSlice(numbers)
index := slice.Search(5)
fmt.Println(index)
}
Результат выполнения кода:
2
Метод Len для получения длины
Метод Len возвращает количество элементов в срезе.
Этот метод реализует интерфейс sort.Interface.
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{10, 20, 30, 40, 50}
slice := sort.IntSlice(numbers)
length := slice.Len()
fmt.Println(length)
}
Результат выполнения кода:
5
Методы Less и Swap для сравнения и обмена
Метод Less сравнивает два элемента по индексам
и возвращает true, если элемент с индексом i
меньше элемента с индексом j. Метод Swap
меняет местами элементы с указанными индексами.
Эти методы также реализуют интерфейс sort.Interface.
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{10, 5, 8, 3}
slice := sort.IntSlice(numbers)
less := slice.Less(0, 1)
fmt.Println(less)
slice.Swap(0, 1)
fmt.Println(numbers)
}
Результат выполнения кода:
false
[5 10 8 3]
Пример использования с функциями пакета sort
Благодаря реализации интерфейса sort.Interface,
тип sort.IntSlice можно использовать с функциями
sort.Sort и sort.IsSorted:
package main
import (
"fmt"
"sort"
)
func main() {
numbers := []int{4, 2, 7, 1, 9}
slice := sort.IntSlice(numbers)
isSorted := sort.IsSorted(slice)
fmt.Println(isSorted)
sort.Sort(slice)
fmt.Println(numbers)
isSorted = sort.IsSorted(slice)
fmt.Println(isSorted)
}
Результат выполнения кода:
false
[1 2 4 7 9]
true
Смотрите также
-
функцию
sort.Ints,
которая сортирует срез целых чисел -
функцию
sort.IntsAreSorted,
которая проверяет, отсортирован ли срез целых чисел -
функцию
sort.SearchInts,
которая ищет значение в отсортированном срезе целых чисел -
функцию
sort.Sort,
которая сортирует любой срез, реализующий интерфейсsort.Interface