数据结构
数组
- 数组是定长的
- 在go语言中,数组使用的并不是很多,一般使用的更多的是切片类型
- 但是如果是需要一个矩阵的话,你可能更需要一个二维的数组,而不是一个二维的切片
一维数组的声明与初始化
var name [num]type
var q [3]int = [3]int{1, 2, 3}
多维数组的声明与初始化
var name [num1][num2] type
var array = [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
切片
- 切片可以改变长度,所以在go中使用的特别频繁
- 切片可以很灵活的对你的数据进行修改,所以尽量使用切片代替数组
声明
初始化一个切片
var arr = [5]int{1,2,3,4,5}
返回结果分别为[2]和[2 3 4 5]
arr[1:2] arr[1:]
声明一个切片
var arr = []int
make创建切片 2为分配空间 10为预分配空间(降低多次分配空间造成的性能问题)
提前预分配好空间可以很大程度上优化代码的性能
b := make([]int, 2, 10)
增加元素
追加一个元素
var a []int
a = append(a,1) a = append(a,1,2,3)
追加切片 前面添加切片
a = append(a,[]int{1,2,3}...) append([]int{0}, a...)
某个位置添加元素
a = append(a[:i],append([]int{1,2,3},a[i:]...)...)
复制元素
将b的前三个元素复制给a
a := []int{1,2,3}
b := []int{4,5,6,7}
copy(a,b)
删除元素
a := []int{1,2,3,4}
删除开头元素
a = a[i:]
删除中间元素
a = append(a[:i],a[j:]...)
删除结尾元素
a = a[:i]
多维切片
- 二维边长的切片可能不是特别常用
- 因为一般都是应用于矩阵,此时就需要使用二维数组已经写死的行列数
声明一个二维切片
var slice [][]int
为二维切片赋值
slice = [][]int{{10}, {100, 200}}