golang-map的基本操作
阿新 • • 發佈:2020-10-10
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)
}
}