五、array、slices和map
array
1 package main 2 3 import "fmt" 4 5 func main() { 6 var arr [5]int 7 arr[0] = 52 8 arr[1] = 53 9 for i, v := range arr { 10 fmt.Println(i, v) 11 } 12 //采用...的方式Go会自动根据元素个数来计算长度 13 b := [...]int{1, 2, 3, 4, 5, 6} 14 fmt.Println(len(b)) 15 //二维数组 16 //也可以为[2][2]int{{1,2},{3,4}} 17 a := [2][2]int{[2]int{1, 2}, [2]int{3, 4}} 18 for i, v := range a { 19 fmt.Println(i, v) 20 } 21 }
结果:
0 52
1 53
2 0
3 0
4 0
6
0 [1 2]
1 [3 4]
slices
指向array的指针,与array不同的地方,slice是应用类型,这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个array。
1 package main 2 3 import "fmt" 4 5 func main() { 6 //创建一个保存有10个元素的slice 7 sl := make([]int, 10) 8 sl[2] = 22 9 fmt.Println(sl) 10 var a [10]int 11 s := a[0:8] 12 //输出为97 13 s[7] = 'a' 14 //slice[99]='a' index out of range 15 fmt.Println(s) 16 fmt.Println(len(a), cap(a)) //输出10 10 17 fmt.Println(len(s), cap(s)) //输出8 10 18 //追加多个元素 19 s = append(s, 2, 4, 5, 7) 20 fmt.Println(s) 21 //copy 22 var aa = [...]int{0, 1, 2, 3, 4, 5, 6, 7} 23 var ss = make([]int, 6) 24 //从源slice src复制元素到目标dst 25 //复制的数量是len(src)和len(dst)中的最小值 26 n1 := copy(ss, aa[0:]) 27 fmt.Println(n1, ss) 28 n2 := copy(ss, ss[2:]) 29 fmt.Println(n2, ss) 30 }
结果:
[0 0 22 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 97]
10 10
8 10
[0 0 0 0 0 0 0 97 2 4 5 7]
6 [0 1 2 3 4 5]
4 [2 3 4 5 4 5]
map
一个用字符串做索引的数组
1 package main 2 3 import "fmt" 4 5 func main() { 6 monthdays := map[string]int{ 7 "Jan": 31, "Feb": 28, "Mar": 31, 8 "Apr": 30, "May": 31, "Jun": 30, 9 "Jul": 31, "Aug": 31, "Sep": 30, 10 "Oct": 31, "Now": 30, "Dec": 31, 11 } 12 fmt.Println(monthdays["Oct"]) 13 //当只需要声明一个map的时候,使用make的形式:monthdays:=make(map[string]int) 14 year := 0 15 //键没有使用,所以用_ 16 for _, days := range monthdays { 17 year += days 18 } 19 fmt.Printf("Numbers of days in a year:%d\n", year) 20 //map添加元素 21 monthdays["undecim"] = 30 //添加一个月 22 monthdays["Feb"] = 29 //闰年时重写这个元素 23 //检查元素是否存在 24 v, ok := monthdays["Jan"] //存在ok值为true 25 fmt.Println(v, ok) 26 //map中移除元素 27 delete(monthdays, "Jan") 28 v, ok = monthdays["Jan"] 29 fmt.Println(v, ok) 30 }
31
Numbers of days in a year:365
31 true
0 false
浙公网安备 33010602011771号