五、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

posted on 2013-01-30 22:59  liubiaoren  阅读(139)  评论(0)    收藏  举报