当前位置:网站首页>【Yugong Series】July 2022 Go Teaching Course 021-Slicing Operation of Go Containers
【Yugong Series】July 2022 Go Teaching Course 021-Slicing Operation of Go Containers
2022-07-31 16:39:00 【HUAWEI CLOUD】
一、切片操作
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)}
边栏推荐
- i.MX6ULL driver development | 33 - NXP original network device driver reading (LAN8720 PHY)
- tensorflow2.0 cnn(layerwise)
- 【TypeScript】深入学习TypeScript类型操作
- 字符指针赋值[通俗易懂]
- adb shell error error: device unauthorized
- How to switch remote server in gerrit
- Small program: Matlab solves differential equations "recommended collection"
- 多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
- 宁波大学NBU IT项目管理期末考试知识点整理
- [TypeScript]OOP
猜你喜欢
"Autumn Recruitment Series" MySQL Interview Core 25 Questions (with answers)
Foreign media right, apple on May be true in inventory
华为顶级工程师历时9年总结的“趣谈网络协议”PDF文档,太强了
6-22 Vulnerability exploit - postgresql database password cracking
tooltips使用教程(鼠标悬停时显示提示)
[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development
js的toString方法
全新宝马3系上市,安全、舒适一个不落
.NET 20周年专访 - 张善友:.NET 技术是如何赋能并改变世界的
i.MX6ULL驱动开发 | 33 - NXP原厂网络设备驱动浅读(LAN8720 PHY)
随机推荐
动态规划(一)
flutter设置statusbar状态栏的背景颜色和 APP(AppBar)内部颜色一致方法。
6. 使用 Postman 工具高效管理和测试 SAP ABAP OData 服务
研发过程中的文档管理与工具
Dialogue with Zhuang Biaowei: The first lesson of open source
form 表单提交后,使页面不跳转[通俗易懂]
【Meetup预告】OpenMLDB+OneFlow:链接特征工程到模型训练,加速机器学习模型开发
Summary of the implementation method of string inversion "recommended collection"
关于柱状图的经典画法总结
ML.NET相关资源整理
Smart Trash Can (8) - Infrared Tube Sensor (Raspberry Pi pico)
牛客网刷题(四)
i.MX6ULL driver development | 33 - NXP original network device driver reading (LAN8720 PHY)
2020微信小程序反编译教程(小程序反编译源码能用吗)
最新神作!阿里巴巴刚出炉的面试参考指南(泰山版),我直接狂刷29天
复制延迟案例(3)-单调读
基于ABP实现DDD
After the form is submitted, the page does not jump [easy to understand]
2022年整理LeetCode最新刷题攻略分享(附中文详细题解)
Anaconda如何顺利安装CV2