写点什么

【愚公系列】2022 年 10 月 Go 教学课程 021-Go 容器之切片操作

作者:愚公搬代码
  • 2022 年 10 月 07 日
    福建
  • 本文字数:1658 字

    阅读完需:约 5 分钟

一、切片操作

1.什么是切片

切片和数组类似,都是数据集合。和数组不同的是,切片是一块动态分配大小的连续空间。

2.切片的定义

2.1 切片的格式

var 变量名 []T //T 表示切片类型。
复制代码


相关案例:


package main
import "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 main
import "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 main
import "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 main
import "fmt"
func main() {
// 添加切片 list := []string{"愚公 10", "愚公 11", "愚公 12"} // list 后面的 ... 表示将 list 整个添加到 strList 切片中 fmt.Println(list, list[1:2])}
复制代码



package main
import "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 main
import "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 main
import "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)}
复制代码



发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年10月 Go教学课程 021-Go容器之切片操作_10月月更_愚公搬代码_InfoQ写作社区