开发者

Go1.21新增cmp包的用法详解

开发者 https://www.devze.com 2023-11-21 11:31 出处:网络 作者: 路多辛
目录cmp.Compare 函数cmp.Less 函数cmp.Ordered 接口cmp.Compare 函数 定义如下: func Compare[T Ordered](x, y T) int
目录
  • cmp.Compare 函数
  • cmp.Less 函数
  • cmp.Ordered 接口

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 main
import (
    "cmp"
    "fmt"
编程    "math"
)
func main() {
    fmt.Println(cmp.Compare(1, 2))                   // -1
    fmt.Println(cmp.Compare(1, lFXLcrmV1))                   // 0
    fmt.Println(cmp.Compare(2, 1))                   // 1
    fmt.Println(cmp.Compare(1, math.NaN()))          // 1
    fmt.Println(cmp.Compare(-1, math.NaN()))         // 1
    fmt.Println(cmp.Compare(math.NaN(), math.NaN())) // 0
    fmt.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 main
import (
    "cmp"
    "fmt"
    "math"
)
func main() {
    fmt.Println(cmp.Less(1, 2))                   //true
    fmt.Println(cmp.Less(1, 1))                   // false
    fmt.Println(cmp.Less(2, 1))                   // false
    fmt.Println(cmp.Less(1, math.NaN()))          // false
    fmt.Println(cmp.Less(-1, math.NaN()))         // false
    fmt.Println(cmp.Less(math.NaN(), math.NaN())) // false
    fmt.Println(cmp.Less(math.NaN(), -1.0))       // true
    fmt.Println(cmp.Less(-0.0, 0.0))         http://www.devze.com     // false
}

cmp.Ordered 接口

定义如下:

type Ordered interface {

    ~int | ~int8 | ~int16 | ~int32 | ~int64 |

    &njavascriptbsp;   ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |

        ~float32 | ~float64 |

        ~string

}

Ordered 是对有序类型的约束,包含任何支持操作符 <、<=lFXLcrmV、>= 和 > 的类型。如果 Go 未来的版本添加了新的有序类型,则将修改此接口以将新的有序类型包含进去。

需要注意的是,浮点类型可能包含NaN(“非数字”)类型的值。在将 NaN 值与任何其它值(无论是否为 NaN)进行比较时,例如 == 或 < 之类的操作符结果都是 false。

到此这篇关于Go1.21新增cmp包的用法详解的文章就介绍到这了,更多相关Go1.21 cmp包内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号