辽宁品质网站建设价格实惠,泰安医院网站建设,狮山网站设计,wordpress后台登陆界面Go 1.21新增的 cmp 包提供了与比较有序值相关的类型和函数#xff0c;前几篇文章讲解的 slices 包中的函数有大量使用到 cmp 包中的函数和类型。
cmp.Compare 函数
定义如下#xff1a;
func Compare[T Ordered](x, y T) int
返回值有以下几种情况#xff1a;
如果 x 小…Go 1.21新增的 cmp 包提供了与比较有序值相关的类型和函数前几篇文章讲解的 slices 包中的函数有大量使用到 cmp 包中的函数和类型。
cmp.Compare 函数
定义如下
func Compare[T Ordered](x, y T) int
返回值有以下几种情况
如果 x 小于 y返回-1如果 x 等于 y返回 0如果 x 大于 y返回 1
对于浮点类型NaN 被认为小于任何非 NaN 的值, NaN 被认为等于 NaN -0.0 被认为等于 0.0。简单示例如下
package mainimport (cmpfmtmath
)func main() {fmt.Println(cmp.Compare(1, 2)) // -1fmt.Println(cmp.Compare(1, 1)) // 0fmt.Println(cmp.Compare(2, 1)) // 1fmt.Println(cmp.Compare(1, math.NaN())) // 1fmt.Println(cmp.Compare(-1, math.NaN())) // 1fmt.Println(cmp.Compare(math.NaN(), math.NaN())) // 0fmt.Println(cmp.Compare(-0.0, 0.0)) // 0
}
cmp.Less 函数
定义如下
func Less[T Ordered](x, y T) bool
判断 x 是否小于 y。对于浮点类型NaN 被认为小于任何非 NaN 的值并且 -0.0 不小于(等于) 0.0。
package mainimport (cmpfmtmath
)func main() {fmt.Println(cmp.Less(1, 2)) //truefmt.Println(cmp.Less(1, 1)) // falsefmt.Println(cmp.Less(2, 1)) // falsefmt.Println(cmp.Less(1, math.NaN())) // falsefmt.Println(cmp.Less(-1, math.NaN())) // falsefmt.Println(cmp.Less(math.NaN(), math.NaN())) // falsefmt.Println(cmp.Less(math.NaN(), -1.0)) // truefmt.Println(cmp.Less(-0.0, 0.0)) // false
}
cmp.Ordered 接口
定义如下
type Ordered interface {~int | ~int8 | ~int16 | ~int32 | ~int64 |~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |~float32 | ~float64 |~string
}
Ordered 是对有序类型的约束包含任何支持操作符 、、 和 的类型。如果 Go 未来的版本添加了新的有序类型则将修改此接口以将新的有序类型包含进去。
需要注意的是浮点类型可能包含NaN“非数字”类型的值。在将 NaN 值与任何其它值无论是否为 NaN进行比较时例如 或 之类的操作符结果都是 false。