Golang Slice 数组和切片
极客时间《Go 语言从入门到实践》学习笔记 03
07 | 运算符
@碧雪天虹 同学给出的关于 &^ 的解释似乎更加容易理解。
08 | 条件和循环
其实我挺喜欢 Go 语言里面只有 for 一种循环关键字,这样就不用想太多,但是没有 foreach 有点可惜。
能感觉到 Go 的语法似乎是吸取了目前现有各种语言的优点,其中当然是有一些取舍和平衡,但是考虑到创建者的资历,我这样的小白只能学习,不能质疑。
09 | 数组和切片
数组截取部分的语法很想 Python 和 Ruby 的,应该是吸取了众家之长。
不支持负数索引略有遗憾(有同学在留言里面给出了解决方案),不过从减少程序员认知负担的角度来说,也没什么不好的。
数组 vs. 切⽚
数组容量不可伸缩;切片可伸缩,cap ×2 相同维数相同长度的数组可以比较,其中的元素全部相同则相等;
看了 @忽然之间 的留言,slice 的 cap 增长规则为:
talk is cheap, show me code
从 @文西 的留言里面,还发现了一个自己的误解,我之前以为 slice 的 cap 是按照 1、2、4、8……1024、1280、1696……这样增长的,但是后来发现,在 1024 之前其实并不完全是按照 2 的幂来增长,也会有 5、10、20……这样的情况
另外,@Vincent 提到,多维数组只有第一维可以使用 "[...]"
@Geek_e634f0 提到,数组截取之后变成 slice
这节课的视频要比之前的长一些,留言也多,留言中的宝藏也不少。
10 | Map 声明、元素访问及遍历
在访问的 Key 不存在时,返回的是 Map 中 Value 类型的默认值,如果是 int ,就是 0;如果是 String ,就是空字符串 ""。
看多了 make 函数,感觉像是在看 C 语言的 malloc
Map 底层使用 Hash 表来存储,无序。
参考 @碧雪天虹 的代码,实现了一下按 key 排序,其实按照 value 排序也没有问题。
看到了其他留言里面对 value 排序的代码,感觉略显繁琐,应该有更好的办法。不知道 go 语言的 map 类型有没有类似于 findByValue 类的操作。
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/94929745228cf83aaffa3bd6f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论