码迷,mamicode.com
首页 > 其他好文 > 详细

slice的比较?

时间:2020-04-25 23:55:38      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:拷贝   ace   包含   UNC   没有   生命周期   ring   判断   不同的   

slice的比较?

slice 没有内置的比较函数

  1. 一个slice的元素是间接引用的,一个slice甚至可以包含自身(当 slice类型是 []interface{})。虽然有很多办法处理这种情形,但是没有一个是简单有效的。
  2. 第二个原因,因为slice的元素是间接引用的,一个固定的slice值(译注:指slice本身的值,不是元素的值)在不同的时刻可能包含不同的元素,因为底层数组的元素可能会被修改。而例如Go语言中map的key只做简单的浅拷贝,它要求key在整个生命周期内保持不变性(译注:例如slice扩容,就会导致其本身的值/地址变化)。而用深度相等判断的话,显然在map的key这种场合不合适。对于像指针或chan之类的引用类型,相等测试可以判断两个是否是引用相同的对象。一个针对slice的浅相等测试的操作符可能是有一定用处的,也能临时解决map类型的key问题,但是slice和数组不同的相等测试行为会让人困惑。因此,安全的做法是直接禁止slice之间的比较操作。

slice如何比较

  • reflect比较的方法

    func StringSliceReflectEqual(a, b []string) bool {
        return reflect.DeepEqual(a, b)
    }
    
  • 循环遍历比较的方法

slice的比较?

标签:拷贝   ace   包含   UNC   没有   生命周期   ring   判断   不同的   

原文地址:https://www.cnblogs.com/Jun10ng/p/12776049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!