Тип sort.IntSlice

Тип sort.IntSlice представляет собой срез целых чисел ([]int), который реализует интерфейс sort.Interface. Это позволяет использовать его с функциями пакета sort. Основное преимущество типа sort.IntSlice заключается в том, что он предоставляет удобные методы для сортировки и поиска без необходимости писать дополнительный код для сравнения элементов.

При преобразовании среза целых чисел в тип sort.IntSlice, вы получаете доступ к методам Sort, Search и Len, Less, Swap.

Синтаксис

Тип sort.IntSlice определяется как срез целых чисел. Для его использования необходимо преобразовать ваш срез в этот тип:

gotype IntSlice []int

Основные методы типа:

gofunc (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 сортирует срез целых чисел в порядке возрастания. Сортировка выполняется на месте, то есть исходный срез изменяется.

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  numbers := []int{5, 2, 8, 1, 9, 3}
  sorted := sort.IntSlice(numbers)
  sorted.Sort()
  fmt.Println(numbers)
}

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

go[1 2 3 5 8 9]

Метод Search для двоичного поиска

Метод Search выполняет двоичный поиск элемента в отсортированном срезе и возвращает индекс, по которому находится искомое значение. Если значение не найдено, возвращается индекс, куда его можно вставить для сохранения порядка.

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  numbers := []int{1, 3, 5, 7, 9}
  slice := sort.IntSlice(numbers)
  index := slice.Search(5)
  fmt.Println(index)
}

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

go2

Метод Len для получения длины

Метод Len возвращает количество элементов в срезе. Этот метод реализует интерфейс sort.Interface.

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  numbers := []int{10, 20, 30, 40, 50}
  slice := sort.IntSlice(numbers)
  length := slice.Len()
  fmt.Println(length)
}

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

go5

Методы Less и Swap для сравнения и обмена

Метод Less сравнивает два элемента по индексам и возвращает true, если элемент с индексом i меньше элемента с индексом j. Метод Swap меняет местами элементы с указанными индексами. Эти методы также реализуют интерфейс sort.Interface.

gopackage 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)
}

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

gofalse
[5 10 8 3]

Пример использования с функциями пакета sort

Благодаря реализации интерфейса sort.Interface, тип sort.IntSlice можно использовать с функциями sort.Sort и sort.IsSorted:

gopackage 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)
}

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

gofalse
[1 2 4 7 9]
true

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

  • функцию sort.Ints,
    которая сортирует срез целых чисел
  • функцию sort.IntsAreSorted,
    которая проверяет, отсортирован ли срез целых чисел
  • функцию sort.SearchInts,
    которая ищет значение в отсортированном срезе целых чисел
  • функцию sort.Sort,
    которая сортирует любой срез, реализующий интерфейс sort.Interface