【问题标题】:Arrays compare in golanggolang中的数组比较
【发布时间】:2017-10-11 03:07:36
【问题描述】:

我需要比较 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

但我认为这不是最理想的方式

【问题讨论】:

  • 所以它应该只返回true 如果数组完全一样,包括它们的顺序?
  • 如果您不需要考虑顺序 - 先排序,然后与==比较。这将是对数,而不是多项式。
  • []uint32 不是一个数组,它是一个切片。

标签: go


【解决方案1】:

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

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 中。

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多