【Go编程基础】07-切片slice
切片Slice
其本身并不是数组,它指向底层的数组
作为变长数组的替代方案,可以关联底层数组的局部或全部
为引用类型
可以直接创建或从底层数组获取生成
使用len()获取元素个数,cap()获取容量
一般使用make()创建
如果多个slice指向相同底层数组,其中一个的值改变会影响全部
make([]T, len, cap)
其中cap可以省略,则和len的值相同
len表示存数的元素个数,cap表示容量
1 | func main() { |
1 | func main() { |
Slice与底层数组的对应关系
1 | func main() { |
Reslice
- Reslice时索引以被slice的切片为准
- 索引不可以超过被slice的切片的容量cap()值
- 索引越界不会导致底层数组的重新分配而是引发错误
1 | func main() { |
Append
- 可以在slice尾部追加元素
- 可以将一个slice追加在另一个slice尾部
- 如果最终长度未超过追加到slice的容量则返回原始slice
- 如果超过追加到的slice的容量则将重新分配数组并拷贝原始数据
1 | func main() { |
1 | func main() { |
1 | func main() { |
Copy
- slice由长的往短的copy,不会改变短的len,也可以拷贝一部分,例如:copy(s2[1:2], s1[2:3])
1 | func main() { |
思考问题
- 如何将一个slice指向一个完整的底层数组,而不是底层数组的一部分?
1 | func main() { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Clang's Blog!
评论