map的基本操作
map的定義方式
由於map是引用類型,所以在操作的時候,必須先初始化
方式一:
var a map[string]int
a = make(map[string]int, 16)
fmt.Printf("a = %#v \n", a)
a["stu01"] = 1000
方式二:
a := map[string]int{
"stu01": 100,
"stu03": 300,
"stu02": 200,
}
fmt.Printf("a = %#v \n", a)
判斷key是否存在
在獲取map的值得時候,可以接收兩個值,一個是獲取的值,一個是判斷是否存在的bool類型,如果存在,返回對應值,bool為true,不存在,返回對應類型的空值,bool為false
func test3() {
var a map[string]int
a = make(map[string]int, 16)
fmt.Printf("a = %#v \n", a)
a["stu01"] = 1000
a["stu02"] = 2000
var result int
var ok bool
var key string = "stu04"
result, ok = a[key]
if ok == false {
fmt.Printf("key is %s is not exist\n", key)
} else {
fmt.Printf("key is %s = %d \n", key, result)
}
}
map的遍歷key,value
使用for ... range 的方法進行遍歷,獲取當中的值
func test4() {
rand.Seed(time.Now().UnixNano())
var a map[string]int
a = make(map[string]int, 1024)
for i := 0; i < 128; i++ {
key := fmt.Sprintf("stu%d", i)
value := rand.Intn(1000)
a[key] = value
}
for key, value := range a {
fmt.Printf("map[%s]=%d\n", key, value)
}
}
map刪除元素
使用內置的delete方法進行刪除
func test5() {
var a map[string]int
a = make(map[string]int, 16)
fmt.Printf("a = %#v \n", a)
a["stu01"] = 1000
a["stu02"] = 2000
a["stu03"] = 3000
fmt.Printf("a = %#v \n", a)
delete(a, "stu02")
fmt.Printf("DEL after a = %#v \n", a)
}
刪除所有的,需要用for循環,挨個刪除
map的長度
使用len內置函數求出
map的復制
map是引用類型,在系統中,復制的時候,指向的內存地址是一樣的,所以修改一個,其他的也會跟着變更
func test6() {
var a map[string]int
if a == nil {
a = make(map[string]int, 16)
a["stu01"] = 1000
a["stu02"] = 2000
a["stu03"] = 3000
fmt.Printf("a = %#v \n", a)
b := a
b["stu01"] = 8888
fmt.Printf("after modify a : %#v\n", a)
}
}
map的切片
由於map的value可以是數組,或者int,所以在value是數組的時候,使用的時候,也需要先初始化
func main() {
rand.Seed(time.Now().UnixNano())
var s []map[string]int
s = make([]map[string]int, 5, 16)
for index, value := range s {
fmt.Printf("slice[%d] = %v \n", index, value)
}
fmt.Println()
s[0] = make(map[string]int, 16)
s[0]["stu01"] = 1000
s[0]["stu02"] = 2000
s[0]["stu03"] = 3000
for index, value := range s {
fmt.Printf("slice[%d] = %v \n", index, value)
}
}