map和slice底层为何没有实现比较;slice有下标所以有序,map读取无序,存储应该也是有序的。不可比较原因是什么?
1条回答 默认 最新
Junebao 2022-09-09 12:41关注原理上是可行的,之所以不把他们定义为可比较(
comparable) 主要是为了避免一些歧义吧,试想一下,如果他们是可比较的,那我可不可以把它作为 map 的 key 呢?想象这样的一段代码a := make(map[[]int]struct{}, 0) i := []int{1, 2, 3} j := i a[i] = struct{}{} a[j] = struct{}{} j[0] = 0不同于数组,切片只是指向底层数组的一个指针,在执行完
j[0] = 0后 map 的 key 也会改变,这是不可理愈的。
如果一个可比较的类型不能作为 map 的 key ,那它为什么要被定义为可比较呢?除此之外,是否相等的定义也是很难定义的,比如
make([]int64, 0, 10)和make([]int64, 0, 9)是否相等呢解决 无用评论 打赏 举报