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類型,如果存在咆瘟,返回對應(yīng)值嚼隘,bool為true,不存在袒餐,返回對應(yīng)類型的空值飞蛹,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 的方法進(jìn)行遍歷灸眼,獲取當(dāng)中的值
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刪除元素
使用內(nèi)置的delete方法進(jìn)行刪除
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循環(huán),挨個刪除
map的長度
使用len內(nèi)置函數(shù)求出
map的復(fù)制
map是引用類型幢炸,在系統(tǒng)中泄隔,復(fù)制的時候,指向的內(nèi)存地址是一樣的宛徊,所以修改一個佛嬉,其他的也會跟著變更
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可以是數(shù)組,或者int闸天,所以在value是數(shù)組的時候暖呕,使用的時候,也需要先初始化
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)
}
}