检查两个切片的相等性

如何检查两个切片是否相等?


慕码人2483693
浏览 239回答 3
3回答

慕姐8265434

您需要遍历切片中的每个元素并进行测试。切片的相等性未定义。但是,bytes.Equal如果您要比较 type 的值,则有一个函数[]byte。func testEq(a, b []Type) bool {    if len(a) != len(b) {        return false    }    for i := range a {        if a[i] != b[i] {            return false        }    }    return true}

DIEA

你应该使用reflect.DeepEqual()DeepEqual 是 Go 的 == 运算符的递归松弛。DeepEqual 报告 x 和 y 是否“深度相等”,定义如下。如果以下情况之一适用,则相同类型的两个值非常相等。不同类型的值永远不会完全相等。当数组的对应元素深度相等时,数组值也深度相等。如果导出和未导出的相应字段非常相等,则结构值非常相等。如果两者都为零,则 Func 值非常相等;否则他们就不是完全平等的。如果接口值具有非常相等的具体值,则它们是非常相等的。如果映射值是相同的映射对象或者它们具有相同的长度并且它们的对应键(使用 Go 相等匹配)映射到深度相等的值,则映射值是深度相等的。如果指针值使用 Go 的 == 运算符相等,或者它们指向深度相等的值,则它们是深度相等的。当以下所有条件都为真时,切片值非常相等:它们都是 nil 或都非 nil,它们具有相同的长度,或者它们指向相同底层数组的相同初始条目(即 &x[0 ] == &y[0]) 或它们对应的元素(直到长度)是非常相等的。请注意,非 nil 空切片和 nil 切片(例如,[]byte{} 和 []byte(nil))并不完全相等。其他值 - 数字、布尔值、字符串和通道 - 如果使用 Go 的 == 运算符相等,则它们非常相等。

富国沪深

这只是使用在@VictorDeryagin 的回答中给出的reflect.DeepEqual() 的示例。package mainimport (    "fmt"    "reflect")func main() {    a := []int {4,5,6}    b := []int {4,5,6}    c := []int {4,5,6,7}    fmt.Println(reflect.DeepEqual(a, b))    fmt.Println(reflect.DeepEqual(a, c))}结果:truefalse在Go Playground 中尝试
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go