随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

go 切片

前言:

切片的底层是数组,是对数组一个连续片段的引用。

切片和数组的不同在于定义时:数组[]中有值,切片[]中无值

由于数组的长度不可改变,所以Go提供了一种灵活,功能强悍的内置类型切片(“动态数组”)

切片是一个有三个字段的数据结构,这 3 个字段分别是容量(capacity)长度(length)指向底层数组某元素的指针

 

正文:

定义语法:

 变量名 :=make( []type, size, [cap] )     cap 为可选参数

type 是指切片的元素类型,

size 指的是为这个类型分配多少个元素,

cap 为预分配的元素数量,cap>=len

 

示例1num := make([]int, 3)  //定义一个地址空间

示例2num := make([]int, 3, 5) //定义一个地址空间,和容量

fmt.Println(num)      //输出[0 0 0]

fmt.Println(len(num)) //输出长度3

fmt.Println(cap(num)) //输出容量5

 

示例3:不使用make定义

var num []int
num = append(num, 1) //添加元素
num = append(num, 2) //添加元素
fmt.Println(num) //输出 [1 2]

 

切片操作

添加元素:slice  = append(slice,value)

获取长度: len(slice)

获取容量:cap(num)

切片截取: slice[i:j:k]

i 表示从 slice 的第几个元素开始切从第0个开始

j  j 控制切片的结束索引 ,切片长度为(j-i)  j结束,不包含j

k  控制切片的容量(k-i)    k>=j   可以不加  默认就是原数组长度-i

删除元素:就是把不要的元素去掉,在拼接新的切片

num = append(num[:len(num)-4], num[4:]...) //删除第四个元素 输出:[1 2 3 5 6 7]

切片copy

count := copy(num1, num2)   

//num2会覆盖num1切片 ,返回成功的个数count

 

多维切片定义:

str := [][]string{

{"lampol", "11122233"},

{"liudehua", "22211133"},

{"zhangxueyou", "222333211"},

}

 

切片遍历:

num := []int{1, 2, 3, 4, 5, 6}

//for i 的形式

for i := 0; i < len(num); i++ {

    fmt.Println(num[i])

}

//for range的形式

for i, v := range num {

    fmt.Println(i, v)

}

 

多维切片遍历:

str := [][]string{ //定义多维数组
   {"lampol", "11122233"},
   {"liudehua", "22211133"},
   {"zhangxueyou", "222333211"},
}

for k1, v1 := range str {
   for k2, v2 := range v1 {
      fmt.Println(k1, k2, v2)     }
}

 

切片排序:

排序示例1整型切片排序

num := []int{8, 5, 1, 9, 2, 5, 3}

//升序

//sort.Ints(num)                       //按照升序排列

//fmt.Println(sort.IntsAreSorted(num)) //判断是否按照升序排列 ,输出 true

//fmt.Println(num)                     //输出:[1 2 3 5 5 8 9]

//降序

sort.Sort(sort.Reverse(sort.IntSlice(num)))  //倒序排列

fmt.Println(num)  //输出 [9 8 5 5 3 2 1]

 

排序示例2字符串类型切片排序

str := []string{"f", "g", "a", "d", "be"}

sort.Strings(str) //字符串排序 升序

//sort.Sort(sort.Reverse(sort.StringSlice(str)))   //倒叙

fmt.Println(str)  //输出 [a be d f g]

 

完结

 

posted @ 2023-03-31 22:59  yangphp  阅读(5)  评论(0编辑  收藏  举报