Функция slices.IsSortedFunc

Функция slices.IsSortedFunc проверяет, отсортирован ли слайс в порядке возрастания согласно пользовательской функции сравнения. Она возвращает true, если слайс отсортирован, и false в противном случае. Первым параметром функция принимает слайс для проверки, вторым - функцию сравнения, которая должна возвращать отрицательное число, если первый элемент меньше второго, положительное, если больше, и ноль, если элементы равны.

Синтаксис

goslices.IsSortedFunc(slice, cmp)

Пример

Давайте проверим, отсортирован ли слайс целых чисел в порядке возрастания с помощью пользовательской функции сравнения:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{1, 2, 3, 4, 5}
  cmp := func(a, b int) int {
    return a - b
  }
  res := slices.IsSortedFunc(numbers, cmp)
  fmt.Println(res)
}

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

gotrue

Пример

Давайте проверим, отсортирован ли слайс строк в порядке возрастания (лексикографическом) с использованием функции strings.Compare:

gopackage main

import (
  "fmt"
  "slices"
  "strings"
)

func main() {
  words := []string{"a", "b", "c", "d", "e"}
  res := slices.IsSortedFunc(words, strings.Compare)
  fmt.Println(res)
}

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

gotrue

Пример

Давайте проверим, отсортирован ли слайс в порядке убывания, используя пользовательскую функцию сравнения:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{5, 4, 3, 2, 1}
  cmp := func(a, b int) int {
    return b - a
  }
  res := slices.IsSortedFunc(numbers, cmp)
  fmt.Println(res)
}

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

gotrue

Пример

Давайте проверим, отсортирован ли слайс структур по полю с помощью пользовательской функции:

gopackage main

import (
  "fmt"
  "slices"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  people := []Person{
    {"Alice", 25},
    {"Bob", 30},
    {"Charlie", 35},
  }
  cmp := func(a, b Person) int {
    return a.Age - b.Age
  }
  res := slices.IsSortedFunc(people, cmp)
  fmt.Println(res)
}

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

gotrue

Пример

Давайте проверим неотсортированный слайс с пользовательской функцией сравнения:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  numbers := []int{1, 3, 2, 4, 5}
  cmp := func(a, b int) int {
    return a - b
  }
  res := slices.IsSortedFunc(numbers, cmp)
  fmt.Println(res)
}

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

gofalse

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

  • функцию slices.IsSorted,
    которая проверяет отсортированность слайса со стандартным сравнением
  • функцию slices.SortFunc,
    которая сортирует слайс с пользовательской функцией сравнения
  • функцию slices.SortStableFunc,
    которая стабильно сортирует слайс с пользовательской функцией сравнения
  • функцию slices.CompareFunc,
    которая сравнивает два слайса с использованием пользовательской функции сравнения