- 可以利用 array 在列表中进行多个值的排序,或者使用更加灵活的:slice。字典或哈希类型同样可以使用,在 Go 中叫 map。
array
- Tips:
- 当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。
一、一维数组
- 声明
var array [888]int
- 声明且初始化
var a=[888]int{1,2} //必须有var,右边可以没数组名
- 元素访问:同c++
二、二维(多维)数组
- 声明
var a [88][88]int
- 声明并初始化
var a=[][]int{{1,1},{2,2}} //复合声明,内部和外部声明 类型 一致时,内部类型可以省略
思考
- go的数组名本质上是什么?对象?似乎不是一个指向第一个元素位置的指针?
var a=[2]int{32,43}
fmt.Println(a)
输出:[32,43]
slice
- Tips:
- slice是一个指向数组的指针,引用类型,可变长
一、创建slice
sl := make([]in t , 10) //创建了一个保存有 10 个元素的 slice
// array[n:m] 从 array 创建了一个 slice,具有元素 n 到 m-1
a := [ ]int {1, 2, 3, 4, 5}
s1 := a[2:4]
s2 := a[1:5]
s3 := a[:]
s4 := a[:4]
s5 := s2[:]
二、扩展slice
- 使用append或copy等函数
append( ),返回扩展后的slice,可增加一个或多个数,也可增一个slice
copy( ),返回copy的元素个数(copy的slice和目标slice长度取较小值)
a:={1,2,3,4,5,6,7,8}
s1:=make([ ]int,6) //s1定长为6
s2:=a[3:5] //s2={4, 5}
n1:=copy(s1,a[ :4]) //s1={1,2,3,4},n=4
n2:=copy(s1,s2) //s1={4,5,3,4},n=2
s3:=append(s1,9) //s3={4,5,3,4,9}
s4:=append(s1,s2...) //s4={4,5,3,4,9,4,5}
map
一、创建map
- 一般定义 map 的方法是:map[from type]to type。需要声明一个 map 的时候,使用 make 的形式
//有初始化
monthdays := map[string]int {
"Jan": 31, "Feb": 28, "Mar": 31,
"Apr": 30, "May": 31, "Jun": 30,
"Jul": 31, "Aug": 31, "Sep": 30,
"Oct": 31, "Nov": 30, "Dec": 31, ← 逗号是必须的
}
//无初始化
monthdays := make(map[string]int
二、遍历
year := 0
fo r _, days := range monthdays { //键未使用,故用 _, days
year += days
}
fmt.Printf("Numbers of days in a year: %d\n", year)
三、增加修改元素
monthdays["Undecim"] = 30
monthdays["Feb"] = 29
四、检查元素是否存在
var v int //如下标对应的元素存在,则v是该元素值
var p bool //存在返回true,不存在返回false
v,p=monthdays["Jan"]
五、删除某元素
delete(monthdays, "Jan")
//delete(m, x) 会删除 map 中由 m[x] 建立的实例