栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Go切片不能用作Go映射中的键,就像数组可以用作键一样?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Go切片不能用作Go映射中的键,就像数组可以用作键一样?

这是陶洁儿(Nigel Tao)在https://groups.google.com/forum/#!topic/golang-
nuts/zYlx6sR4F8Y
的回答:

原因之一是数组是值类型。如果

a0
[N]int
(数组),则执行

a1 := a0a1[0] = 0

完全不会影响

a0[0]

相比之下,切片指的是基础数组。复制切片值是O(1)而不是O(length)。如果

s0
[]int
(一片)然后

s1 := s0s1[0] = 0

会影响什么

s0[0]

http://play.golang.org/p/TVkntIsLo8

映射键需要一些相等的概念。对于数组,这只是元素方面的相等。对于切片,定义平等的方法不止一种:一种是元素方式的平等,另一种是指相同的数组后备存储。此外,地图插入是否需要对整个后备阵列进行(昂贵的)复制?复制可能不会那么令人惊讶,但是与分配的工作不一致。

此代码段应打印什么?

m := make(map[[]int]bool)s0 := []int{6, 7, 8}s1 := []int{6, 7, 8}s2 := s0m[s0] = trues2[0] = 9println(m[s0])println(m[s1])println(m[s2])

不同的程序员可能会有不同的期望。为避免混淆,我们仅决定暂时不将切片用作地图键。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448015.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号