map
- map的基本介紹
- map的宣告
- 1、基本語法
- 2、map宣告舉例
- 3、案例演示
- map的使用
- map的增刪改查操作
- 1、map增加和更新
- 2、map洗掉
- 3、map查找
- map遍歷
- map使用細節
map的基本介紹
map是一種無序的基于key-value的資料結構,Go語言中的map是參考型別,必須初始化才能使用,
map的宣告
1、基本語法
var 變數名 map[keytype]valuetype
說明:
- golang中的map的key可以是很多種型別,比如bool,string,指標,channel,整數,浮點數,還可以是包含前面幾個型別的介面,結構體,陣列,通常key為int,string,注意:slice,map還有function不可以,因為這幾個沒辦法用==判斷,
- valuetype的型別和key基本一樣,通常為整數、浮點數,string,map,struct,
2、map宣告舉例
var a map[string]string
var a map[int]string
var a map[string]int
var a map[string]map[string]string
...
注意:宣告是不會分配記憶體的,初始化需要make,分配記憶體后才能賦值和使用,
3、案例演示
package main
import(
"fmt"
)
func main(){
//map的宣告和注意事項
var a map[string]string
//在使用map前,需要先make,make的作用就是給map分配資料空間
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
}
運行結果:

說明:
- map在使用前一定要make
- map的key是不能重復的,如果重復了,則以最后這個key-value為準,
- map的value可以相同的
- map的key-value是無序的
- make內置函式

map的使用
package main
import(
"fmt"
)
func main(){
//第一種使用方式
var a map[string]string
//在使用map前,需要先make,make的作用就是給map分配資料空間
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
//第二種使用方式
cities := make(map[string]string)
cities["c1"] = "北京"
cities["c2"] = "深圳"
cities["c3"] = "廣州"
fmt.Println(cities)
//第三種使用方式
heroes := map[string]string{
"hero1" : "宋江",
"hero2" : "盧俊義",
"hero3" : "武松",
}
heroes["hero4"] = "林沖"
fmt.Println(heroes)
}
運行結果:

練習案例:
package main
import(
"fmt"
)
//案例
/*
演示一個key-value的value是map的案例
比如:我們要存放學生的資訊,每個學生有name,sex資訊
*/
func main(){
stuMap := make(map[string]map[string]string)
stuMap["stu1"] = make(map[string]string)
stuMap["stu1"]["name"] = "Casey"
stuMap["stu1"]["sex"] = "女"
stuMap["stu2"] = make(map[string]string)
stuMap["stu2"]["name"] = "Jerry"
stuMap["stu2"]["sex"] = "男"
fmt.Println(stuMap)
fmt.Println(stuMap["stu1"])
fmt.Println(stuMap["stu2"]["name"])
}
運行結果:

map的增刪改查操作
1、map增加和更新
map[key] = value
如果key還沒有,就是增加,如果key存在就是修改,
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
}
2、map洗掉
delete(map,key),delete是一個內置函式,如果key存在,就洗掉該key-value,如果key不存在,不操作,但是也不會報錯,

案例演示:
package main
import(
"fmt"
)
//案例
/*
演示一個key-value的value是map的案例
比如:我們要存放學生的資訊,每個學生有name,sex資訊
*/
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
delete(a,"no1")
fmt.Println(a)
}
運行結果:

說明:
如果我們要洗掉map中的所有key,沒有一個專門的方法一次洗掉,可以遍歷一下key,逐個洗掉,或者map = make(…),make一個新的,讓原來的成為垃圾,被gc回收,
3、map查找
val, key := a["no2"]
if key {
fmt.Printf("查找成功,值為%v\n",val)
}else{
fmt.Printf("沒有找到...\n")
}
運行結果:

**說明:**如果a這個map中存在“no2”,那么就會回傳true,否則回傳false,
map遍歷
map的遍歷使用for-range的結構遍歷,
package main
import(
"fmt"
)
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
for key, value := range a{
fmt.Printf("k = %v,v = %v\n",key,value)
}
}
運行結果:

map使用細節
- map是參考型別,遵守應用型別傳遞的機制,在一個函式接收map,修改后,會直接修改原來的map
- map的容量達到后,再想增加元素,會自動擴容,并不會發生panic,也就是說map能動態的增長鍵值對(key-value)
將容量改為1后,程式仍可正常運行,
func main(){
var a map[string]string
//j將容量改為1
a = make(map[string]string,1)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
for key, value := range a{
fmt.Printf("k = %v,v = %v\n",key,value)
}
}
運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/264211.html
標籤:區塊鏈
上一篇:go反射,看這篇就夠了
