Go語言學習之路-8-map
阿新 • • 發佈:2021-01-10
目錄
為什麼會有map
array和slice優點
- 可以儲存相同型別的的資料比如: s1 := []int{1,1,1,1,1,1}
- 在知道下標的情況下訪問資料速度賊快: s2 := []string{"v0", "v1", "v2"} 訪問: s2[1]
缺點
- 如果想判斷某個值是否存在或者不知道資料的下標怎麼辦?一個一個找效率就不高了
map
它是一個: key: value的集合例如: map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
他可以通過key去直接訪問某個值,效率也很高,也可以通過key判斷是否存不像array或者slice下標沒啥特殊意義
map定義
標準定義宣告
func main() {
// map[KeyType]ValueType
// KeyType:表示鍵的型別
// ValueType:表示鍵對應的值的型別
// map是引用型別需要使用make初始化: make(map[KeyType]ValueType, cap)
// 其中cap表示map的容量,該引數雖然不是必須的,但是我們應該在初始化map的時候就為其指定一個合適的容量
m1 := make(map[int]int, 10)
}
注意事項
- key不能重複
- 無序的(值不變但是,不像array和slice的順序不變永遠下標都是順序的,每次輸出值得順序可能是不相同的)
map增加元素
func main() {
m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
m1["義大利"] = "Italy"
fmt.Printf("%v", m1)
}
map判斷元素是否存在
func main() { m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"} // 直接取值會返回兩個值 // 第一個值是: key的value, 第二個值: 如果key存在返回true否則返回false value, isTrue := m1["義大利"] fmt.Printf("%v,%v,\n", value, isTrue)
map刪除元素通過delete
func main() {
m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
// delete(map, key)
delete(m1, "美國")
// 如果要刪除的key不存在什麼都不做
fmt.Printf("%v\n", m1)
map修改元素
func main() {
m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
m1["美國"] = "USA"
fmt.Printf("%v\n", m1)
}
map查詢元素
func main() {
m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
// 直接取值會返回兩個值
// 第一個值是: key的value, 第二個值: 如果key存在返回true否則返回false
value, isTrue := m1["義大利"]
fmt.Printf("%v,%v,\n", value, isTrue)
if isTrue {
fmt.Printf("義大利已經存在了")
} else {
m1["義大利"] = "Italy"
}
}
map元素的迴圈
func main() {
m1 := map[string]string{"中國": "China", "英國": "Britain", "美國": "America"}
// for range
for key, value := range m1 {
fmt.Printf("key: %v, value: %v\n", key, value)
}
}
map元素的巢狀
func main() {
// 列表包含map
smap1 := []map[string]string{{"name": "eson", "addr": "hebei"}, {"name": "eric", "addr": "xian"}}
smap1 = append(smap1, map[string]string{"name": "doudou", "addr": "beijing"})
fmt.Printf("%v\n", smap1)
// map包含列表
maps1 := map[string][]string{"hebei": {"邯鄲市", "保定市"}, "henan": {"新鄭市", "林州市"}}
maps1["shanxi"] = []string{"太原市", "長治市"}
fmt.Printf("%v\n", maps1)
// map包含map
mapm1 := map[string]map[string]string{"eson": {"age": "18", "home": "hebei"}}
mapm1["erice"] = map[string]string{"age": "20", "home": "beijing"}
fmt.Printf("%v\n", mapm1)
}