数组在golang中进行比较

时间:2017-05-11 22:53:07

标签: go

我需要比较2个uint32数组,就像这样

   func in(a uint32, list []uint32) bool {
        for _, b := range list {
            if b == a {
                return true
            }
        }
        return false
    }
for n := 0 ;n < len(a); n++ {
        fmt.Println(in(a[n], b))
    }
// a and b []uint32

但我认为这不是最佳方式

1 个答案:

答案 0 :(得分:3)

如果您实际使用数组,为什么不使用==

  

https://golang.org/ref/spec#Comparison_operators

     

如果数组元素类型的值具有可比性,则数组值是可比较的。如果相应的元素相等,则两个数组值相等。

如果您使用切片,则可以使用reflect.DeepEqual

但是,从您的代码中,您似乎应该查看https://godoc.org/golang.org/x/tools/container/intsets

然后,您创建了两个intsets.Sparse,然后可以执行:

func main() {
    s1 := intsets.Sparse{}
    s2 := intsets.Sparse{}
    s1.Insert(1)
    s1.Insert(2)
    s1.Insert(3)
    s2.Insert(1)
    s2.Insert(2)
    //s1:{1,2,3}
    //s2:{1,2}
    fmt.Println(s1.SubsetOf(&s2), s2.SubsetOf(&s1))
    //false, true
}

将忽略重复,但是让你知道s1是否是s2的一个子集,这意味着s1中的每个元素都存在于s2中。