Пакет cmp
Обзор
Пакет cmp предоставляет типы и функции, связанные с сравнением упорядоченных значений.
Индекс
Примеры
Файлы пакета
cmp.go
func Compare
func Compare[T Ordered](x, y T) int
Compare возвращает
-1 if x is less than y, 0 if x equals y, +1 if x is greater than y.
Для чисел с плавающей точкой NaN считается меньше любого не-NaN, NaN считается равным NaN, а -0.0 равно 0.0.
func Less
func Less[T Ordered](x, y T) bool
Less проверяет, является ли x меньше y. Для чисел с плавающей точкой NaN считается меньше любого не-NaN, а -0.0 не меньше (равно) 0.0.
func Or
func Or[T comparable](vals ...T) T
Or возвращает первый из своих аргументов, не равный нулевому значению. Если ни один аргумент не равен нулю, возвращает нулевое значение.
Пример
Код:
// Suppose we have some user input // that may or may not be an empty string userInput1 := "" userInput2 := "some text" fmt.Println(cmp.Or(userInput1, "default")) fmt.Println(cmp.Or(userInput2, "default")) fmt.Println(cmp.Or(userInput1, userInput2, "default"))
Вывод:
default some text some text
Пример (Сортировка)
Код:
type Order struct {
Product string
Customer string
Price float64
}
orders := []Order{
{"foo", "alice", 1.00},
{"bar", "bob", 3.00},
{"baz", "carol", 4.00},
{"foo", "alice", 2.00},
{"bar", "carol", 1.00},
{"foo", "bob", 4.00},
}
// Sort by customer first, product second, and last by higher price
slices.SortFunc(orders, func(a, b Order) int {
return cmp.Or(
strings.Compare(a.Customer, b.Customer),
strings.Compare(a.Product, b.Product),
cmp.Compare(b.Price, a.Price),
)
})
for _, order := range orders {
fmt.Printf("%s %s %.2f\n", order.Product, order.Customer, order.Price)
}
Вывод:
foo alice 2.00 foo alice 1.00 bar bob 3.00 foo bob 4.00 bar carol 1.00 baz carol 4.00
тип Ordered 1.21
Ordered — это ограничение, которое позволяет любой упорядоченный тип: любой тип, поддерживающий операторы <, <=, >=, >. Если в будущих версиях Go будут добавлены новые упорядоченные типы, это ограничение будет изменено, чтобы включить их.
Обратите внимание, что типы чисел с плавающей точкой могут содержать значения NaN («не число»). Оператор, такой как == или <, всегда будет сообщать false при сравнении значения NaN с любым другим значением, NaN или нет. Смотрите функцию Compare для согласованного способа сравнения значений NaN.
type Ordered interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
~float32 | ~float64 |
~string
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/cmp/