首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go语言中切片操作

1 概述

其中切片是基于数据中连续片段的引用,是一个引用类型。与数组不同的是,切片的长度可以在运行时修改。使用上可以将切片看作是长度可变的数组。即使超过了底层数组的最大长度,也可以继续扩容。

图例为:

切片的实现是由一个底层数组以及其上面的动态位置,尺寸来实现。由内部由指向起始元素的指针、元素数量length和容量capacity组成。其中:

指针ptr,用于指向切片在底层数组的起始位置。

尺寸len,用于记录切片内元素数量。

容量cap,当前切片最大容量,也就是底层数组的容量。可以动态分配。

当使用不定数量参数时,函数得到的参数也是切片类型。

切片为引用类型,因此切片的默认初始值为nil。

2 创建切片

语法整理如下:

[]type,切片类型

[]type,定义时指定初始值

make([]type, len),make开辟内存空间,指定类型和长度

make([]type, len, cap),make开辟切片内存空间,指定类型,长度和容量

arr[start:end:max],由数组或切片创建

其中:

开始索引start,表示从哪个元素开始。

结束索引end,表示到哪个索引终止,不包括该索引元素。

最大索引max,用来确定容量,容量=最大索引-开始索引。默认情况下,最大索引的值为len()。

3 for-range 遍历

4 append() 扩容

func append(s []T, x …T) []T

使用 buildin 函数 append() 可以向切片中添加新元素。添加时存在两种情况:

切片容量充足,在原切片基础上追加。

切片容量不足,会分配新的切片空间来保证已有切片元素和新增元素的存储。

可以将一个切片到另一个切片后,需要使用 切片… 来实现:

5 copy() 拷贝切片

由于默认是地址传递赋值方式,当需要得到一个新的拷贝时,需要使用函数copy()来实现。

copy(新切片,旧切片),利用旧切片复制一份新切片。

6 常用操作

配合 make,append,copy 可以完成切片的常用操作。

通过索引 i 删除切片中某个元素

删除索引 i-j 的元素

在索引 i 的位置插入元素

在 s1 索引 i 的位置插入切片 s2 的所有元素

栈操作模拟

队列操作模拟

完!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030G00DXK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券