Функция slices.CompareFunc
Функция slices.CompareFunc из пакета slices
сравнивает два слайса поэлементно, используя
переданную пользовательскую функцию для определения
порядка элементов. Она возвращает int:
отрицательное число, если первый слайс меньше второго,
ноль, если слайсы равны, и положительное число,
если первый слайс больше второго. Первым и вторым
параметрами функция принимает сравниваемые слайсы,
третьим — функцию сравнения, которая должна возвращать
отрицательное, нулевое или положительное значение
для двух элементов.
Синтаксис
slices.CompareFunc(s1, s2, func(a, b T) int {
// логика сравнения
})
Пример
Сравним два слайса целых чисел по возрастанию:
package main
import (
"fmt"
"slices"
)
func main() {
s1 := []int{1, 2, 3}
s2 := []int{1, 2, 4}
res := slices.CompareFunc(s1, s2, func(a, b int) int {
if a < b {
return -1
} else if a > b {
return 1
}
return 0
})
fmt.Println(res)
}
Результат выполнения кода:
-1
Функция вернула -1, потому что на третьей позиции
элемент 3 меньше 4.
Пример
Сравним два слайса строк по длине элементов:
package main
import (
"fmt"
"slices"
)
func main() {
s1 := []string{"a", "bb", "ccc"}
s2 := []string{"a", "bb", "dd"}
res := slices.CompareFunc(s1, s2, func(a, b string) int {
if len(a) < len(b) {
return -1
} else if len(a) > len(b) {
return 1
}
return 0
})
fmt.Println(res)
}
Результат выполнения кода:
0
Функция вернула 0, потому что длины элементов
на всех позициях совпадают: "ccc" и "dd"
имеют длину 3 и 2 соответственно.
Пример
Сравним слайсы, где первый меньше второго из-за длины:
package main
import (
"fmt"
"slices"
)
func main() {
s1 := []int{1, 2}
s2 := []int{1, 2, 3}
res := slices.CompareFunc(s1, s2, func(a, b int) int {
return a - b
})
fmt.Println(res)
}
Результат выполнения кода:
-1
Функция вернула -1, так как первый слайс
закончился раньше, и считается меньшим.
Смотрите также
-
функцию
slices.Compare,
которая сравнивает слайсы по стандартному порядку -
функцию
slices.EqualFunc,
которая проверяет равенство слайсов с произвольной логикой -
функцию
slices.SortFunc,
которая сортирует слайс с пользовательской функцией -
функцию
slices.IndexFunc,
которая ищет первый элемент, удовлетворяющий условию