当前位置:网站首页>【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
2022-07-31 16:31:00 【华为云】
一、切片操作
1.什么是切片
切片和数组类似,都是数据集合。和数组不同的是,切片是一块动态分配大小的连续空间。
2.切片的定义
2.1 切片的格式
var 变量名 []T //T 表示切片类型。相关案例:
package mainimport "fmt"func main() { // 声明整型切片 var numList []int // 声明字符串切片 var strList []string // 声明一个空切片, {} 表示已经分配内存,但是切片里面的元素是空的 var numListEmpty = []int{} // 输出3个切片 fmt.Println(numList, strList, numListEmpty) // 输出3个切片大小 fmt.Println(len(numList), len(strList), len(numListEmpty)) // 切片判定是否为空结果 fmt.Println(numList == nil) fmt.Println(strList == nil) fmt.Println(numListEmpty == nil)}
2.2 make() 函数定义元素
//T : 切片中元素的类型;//size : 表示为这个类型分配多少个元素;//cap : 预分配的元素数量,该值设定后不影响 size, 表示提前分配的空间,设置它主要用于降低动态扩容时,造成的性能问题。make( []T, size, cap )相关案例:
package mainimport "fmt"func main() { a := make([]int, 10) b := make([]int, 10, 20) fmt.Println(a, b) fmt.Println(len(a), len(b))}
3.append() 函数增加元素
Go 语言中的内置函数 append() 可以为切片动态添加元素, 案例如下:
package mainimport "fmt"func main() { // 声明一个字符串类型的切片 var strList []string // 循环动态向 strList 切片中添加 20 个元素,并打印相关参数 for i := 0; i < 10; i++ { line := fmt.Sprintf("愚公 %d", i) strList = append(strList, line) fmt.Printf("len: %d, cap: %d, pointer: %p, content: %s\n", len(strList), cap(strList), strList, strList[i]) } // 添加切片 list := []string{"愚公 10", "愚公 11"} // list 后面的 ... 表示将 list 整个添加到 strList 切片中 strList = append(strList, list...) fmt.Println(strList)}
4.切片截取
slice [开始位置:结束位置]- slice 表示切片。
- 开始位置和结束位置对应目标切片的下标。
相关案例:
package mainimport "fmt"func main() { // 添加切片 list := []string{"愚公 10", "愚公 11", "愚公 12"} // list 后面的 ... 表示将 list 整个添加到 strList 切片中 fmt.Println(list, list[1:2])}
package mainimport "fmt"func main() { // 添加切片 list := []string{"愚公 10", "愚公 11", "愚公 12"} // list 后面的 ... 表示将 list 整个添加到 strList 切片中 fmt.Println(list, list[1:2], list[1:], list[:2], list[:])}
- 若不填写结束位置,如 list[1:], 则表示从下标 1 置到数组的结束位置。
- 若不填写开始位置,如 list[:2],则表示从 0 到下标 2的位置。
- 若开始位置和结束位置都不填写,如 list[:], 则会生成一个和原有切片一样的切片。
5.切片复制
copy( 原切片, 目标切片 []T) int相关案例:
package mainimport "fmt"func main() { // 设置元素数量为 10 const count = 10 // 源分片 list1 := make([]int, count) // 给源分片赋值 for i := 0; i < count; i++ { list1[i] = i } // 目标分片 list2 := make([]int, count) // 将 srcSlice 分片的数据复制到 destSlice 中 copy(list2, list1) fmt.Println(list1) fmt.Println(list2)}
6.切片删除
Go 语言中并没有提供特定的函数来删除切片中元素,可以利用append来实现切片拼接来删除。
package mainimport "fmt"func main() { // 声明一个字符串类型的切片 arr := []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"} // 打印删除位置之前和之后的元素, arr[:index] 表示的是被删除元素的前面部分数据,arr[index+1:] 表示的是被删除元素后面的数据 fmt.Println(arr[:1], arr[2:]) // 将删除点前后的元素拼接起来 arr = append(arr[:1], arr[2:]...) fmt.Println(arr)}
边栏推荐
- Kubernetes common commands
- 基于ABP实现DDD
- Smart Trash Can (8) - Infrared Tube Sensor (Raspberry Pi pico)
- ansible study notes 02
- Kubernetes principle analysis and practical application manual, too complete
- GP 6总体架构学习笔记
- C language - function
- Applicable Scenarios of Multi-Master Replication (1) - Multi-IDC
- 牛客 HJ3 明明的随机数
- 2020微信小程序反编译教程(小程序反编译源码能用吗)
猜你喜欢

t-sne 数据可视化网络中的部分参数+

Qt practical cases (54) - using transparency QPixmap design pictures

宁波大学NBU IT项目管理期末考试知识点整理

.NET 20周年专访 - 张善友:.NET 技术是如何赋能并改变世界的

使用 Postman 工具高效管理和测试 SAP ABAP OData 服务的试读版
![[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development](/img/f6/311d5a4c70993df6291250d2025d3f.jpg)
[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development

gerrit中如何切换远程服务器

利用PHP开发具有注册、登陆、文件上传、发布动态功能的网站

【7.29】Code Source - 【Arrangement】【Stone Game II】【Cow and Snacks】【Minimum Number of Spawns】【Sequence】

联邦学习:联邦场景下的多源知识图谱嵌入
随机推荐
Anaconda如何顺利安装CV2
Summary of the implementation method of string inversion "recommended collection"
How C programs run 01 - the composition of ordinary executable files
深度学习机器学习理论及应用实战-必备知识点整理分享
使用 Postman 工具高效管理和测试 SAP ABAP OData 服务的试读版
C程序是如何跑起来的01 —— 普通可执行文件的构成
Emmet syntax
Handling write conflicts under multi-master replication (4) - multi-master replication topology
[pytorch] 1.7 pytorch and numpy, tensor and array conversion
ML.NET相关资源整理
Stuck in sill idealTree buildDeps during npm installation, npm installation is slow, npm installation is stuck in one place
单细胞测序流程(单细胞rna测序)
Implementing DDD based on ABP
牛客网刷题(一)
MySQL基础篇【单行函数】
LevelSequence源码分析
【C语言】LeetCode27.移除元素
Flutter set the background color of the statusbar status bar and APP method (AppBar) internal consistent color.
Visualize GraphQL schemas with GraphiQL
i.MX6ULL driver development | 33 - NXP original network device driver reading (LAN8720 PHY)