参考资料
书籍 : Go语言学习笔记
视频 : Google资深工程师深度讲解Go语言
- 数组的定义
- 数组:是同一种数据类型的固定长度的序列
- 定义数组:var a[len]int 比如 var a[5]int
- 长度是数组类型的一部分,因此 var a[5]int和 var a[10]int是不同的类型
- 数组可以通过下标访问,下标是从0开始,最后一个元素的下标是:len-1
for i:=0;i<len(a);i++{ }
- 访问越界,如果下标在合法数组之外,则触发访问越界,会panic
- 调用func f(arr [5]int)会拷贝数组
- 在go语言中一般不直接使用数组,使用切片
- 数组是值类型
- 数组初始化
- var array[5]int=[5]int{1,2,3}
- var array=[5]int{1,2,3,4,5}
- var array=[...]int{1,2,3,4,5,6}
- var str=[5]string{3:"hello world",5:"henry"}
- 切片的定义
- 切片:切片是数组的一个引用,因此切片是引用类型
- 切片的长度可以改变,因此,切片是一个可变的数组
- 切片的遍历方式和数组一样,可以用len()求长度
- cap可以求出slice最大的容量,0<=len(slice)<=cap(array),其中array是slice的数组
- 定义切片: var 变量名[]类型,比如var str[]string , var arr[]int
- 数组切片都是半开半闭区间--左边包含,右边不包含 其它语言基本也一样
- slice本身是没有数据的,是对底层数组的一个视图
- slice可以向后扩展,不可以向前扩展
- s[i]不可以超越len(s),向后扩展不可以超越底层数组cap(s)
- 切片初始化
- 切片初始化: var slice[]int = arr[start:end] -- 包含start到end的元素,但是不包含end
- var slice[]int = arr[0:end]可以简写为
var slice[]int=arr[:end]
- var slice[]int = arr[start:len(arr)]可以简写为
var slice[]int=arr[start:]
- var slice[]int = arr[0:len(arr)]可以简写为
var slice[]int=arr[:]
- 如果要把切片最后一个元素去掉,可以写为
slice = slice[:len(slice)-1]
- make创建切片
- var slice []type=make([]type,len)
- slice : = make([]type,len)
- slice : = make([]type,len,cap)
- 切片的操作
- append(切片,数据)
s2 :=make([]int,2,4)
s2 =append(s2,10)
fmt.Println(s3)
结果为 : [0 0 10]
* copy(数据目标,数据源)s1 :=[]int{2,4,6,8}
s2 :=make([]int ,16)
copy(s2 ,s1)
结果为 : [2 4 6 8 0 0 0 0 0 0 0 0 0 0 0 0]
- 切片去除数据
s2= [2 4 6 8 0]
fmt.Println("去除切片中间数据: ")
s2 = append(s2[:3],s2[4:]...)
printSlice(s2)
fmt.Println("去除切片片头数据: ")
s2 =s2[1:]
printSlice(s2)
fmt.Println("去除切片片尾数据: ")
s2 =s2[:len(s2)-1]
printSlice(s2)
结果为:
去除切片中间数据:
s2= [2 4 6 0]
去除切片片头数据:
s2= [4 6 0]
去除切片片尾数据:
s2= [4 6]
- 添加元素时如果超越cap,系统会重新分配更大的底层数组,如果有人用,原来的数组会继续存在,如果没人用,会回收,重新分配底层数组。
- 由于值传递的关系,必须接收append的返回值
s : =append(s,value)
- append(切片,数据)
- 排序和查找
- 排序和查找主要都在sort包中,导入就可以使用
- 排序
- sort.Ints 对整数进行排序
- sort.Strings 对字符串进行排序
- sort.Float64s 对浮点数进行排序
- 查找
- sort.SearchInte(a []int,b int) 从数组a中查找b,前提a必须有序
- sort.SearchFloats(a []float64,b float) 从数组a中查找b,前提a必须有序
- sort.SearchStrings(a []string,b string ) 从数组a中查找b,前提a必须有序