map
-
map是key-value數據結構,又稱爲字段或者關聯數組。
-
基本語法
-
var 變量名 map[keytype]valuetype
-
key可以是bool,數組,string,指針,channel,還可以是 接口,結構體,數組。通常爲int,string
-
slice、map還有function不可以,因爲這幾個沒法用==來判斷。
-
value的類型和key基本一樣,通常爲數字(整數、浮點數),string,map,struct
-
var a map[string]string
-
var a map[int]string
-
var a map[stirng]int
-
var a map[string]map[string]string
-
-
map使用前需要make, make(Type, size IntegerType)
-
map的key不能重複,重複之後的會覆蓋前面的
-
map的value可以相同
-
map的key-value無序
-
map的使用方式
package main
import (
"fmt"
)
func main() {
//map使用的第一種方式:先聲明,再make
var map1 map[int]string
map1 = make(map[int]string, 5)
map1[1] = "a"
map1[2] = "b"
map1[3] = "c"
fmt.Println("map1=", map1)
// 第二種方式:聲明時就make
map2 := make(map[int]string)
map2[1] = "A"
map2[2] = "B"
fmt.Println("map2=", map2)
// 第三種方式:聲明時賦值
map3 := map[int]string{
1 : "C",
2 : "D",
}
fmt.Println("map3=", map3)
}
-
map的刪除
- delete(map, “key”)
- map的值需要單個刪除
- 刪除所有key,直接make一個新的空間
-
map的查找
- value,boolean = map1[1]
-
map的遍歷使用:for-range
for k, v := range map {
fmt.Printf("key = %v, value = %v", k, v)
}
-
map的長度
- len(map):拿到的是多少對key-value
-
map切片
- 切片的數據類型是map,成爲map切片,map個數就可以動態變化
- var mapSlice []map[string]string
- mapSlice = make([]map[string]string, 2)
- mapSlice[0] = make(map[string]string, 2)
- mapSlice[0][“name”] = “001”
- mapSlice[0][“age”] = “20”
- mapSlice = append(mapSlice, newMap)
-
map的排序
- golang中的map是無序的
- map排序思路
- 先將map的key放到 切片中
- 對切片排序
- 遍歷切片,按照key來輸出map值
// map的排序
map4 := make(map[int]string)
map4[1] = "A"
map4[4] = "B"
map4[6] = "C"
map4[3] = "D"
// 定義一個切片
var keys []int
// 遍歷map
for k, _ := range map4 {
keys = append(keys, k)
}
// 對keys進行排序
sort.Ints(keys)
// 按keys的順序輸出map的值
for _, key := range keys {
fmt.Printf("map4[%v]= %v \n", key, map4[key])
}
- map是引用類型,遵守引用類型傳遞機制
- map能自動擴容
- map的value經常會使用struct類型,更適合管理複雜的數據