mormot對windows websocket的封裝
阿新 • • 發佈:2020-08-11
Golang map
目錄
宣告
var map identifier [keytype]valuetype
和Java
中的HashMap
相似, 可以使用多種型別作為key
,
但是除slice
, map
, function
外
注意: 宣告是不會分類記憶體的, 初始化需要make
, 分配記憶體後賦值使用
- 相同的
key
, 會覆蓋之前的值 key-value
無序len(map)
獲取map
的size
使用
方式一: make
func main() { var m map[string]string m = make(map[string]string, 10) m["張三"] = "sandy" m["李四"] = "swagger" m["王五"] = "woody" fmt.Println(m) }
方式二: 直接宣告
func main() {
//注意區別於陣列arr := [...]string{0:"張三",1:"李四",2:"王五"}
m := map[string]string{
"張三": "sandy",
"李四": "swagger"}
m["王五"] = "woody"
fmt.Println(m)
}
特殊使用
func main() { //以map為value m:= map[string]map[string]string{ "101" : {"name":"張三","gender":"1"}, "102" : {"name":"李四","gender":"1"}, } print("----------------------------") m = make(map[string]map[string]string) //如果未在宣告時賦值, 需要malloc一塊空間 m["101"] = make(map[string]string) m["101"]["name"] = "張三" m["101"]["gender"] = "男" m["102"] = make(map[string]string) m["102"]["name"] = "李四" m["102"]["gender"] = "男" }
通用操作
新增/C
func main() {
m := map[int]string{}
m[1] = "張三"
fmt.Println(m)
}
查詢/R
func main() {
m := map[int]string{}
m[1] = "張三"
m[2] = "李四"
m[3] = "王五"
//通過key查詢,val為對應key的value, flag為是否存在
val,flag := m[3]
fmt.Println(val)
fmt.Println(flag)
}
更新/U
func main() { m := map[int]string{} m[1] = "張三" m[2] = "李四" //覆蓋key為2的k-v m[2] = "王五" fmt.Println(m) }
刪除/D
func main() {
m := map[int]string{}
m[1] = "張三"
m[2] = "李四"
m[3] = "王五"
fmt.Println(m)
//刪除指定的key
delete(m, 2)
fmt.Println(m)
//刪除map,將指標指向一個新的地址, 原先的map被GC
m = make(map[int]string)
}
map遍歷
func traverse(m map[int]string){
for key, val := range m {
fmt.Println(key,val)
}
}
func main() {
m := map[int]string{}
m[1] = "張三"
m[2] = "李四"
m[3] = "王五"
traverse(m)
}
func main() {
//以map為value
m:= map[string]map[string]string{
"101" : {"name":"張三","gender":"1"},
"102" : {"name":"李四","gender":"1"},
}
for k1, nestedMap := range m {
for k2, val := range nestedMap {
fmt.Println(k1,k2,val)
}
}
}
map切片
注意!!!切片是有序的
func main() {
//初始了一個長度為1的切片
m := []map[string]string{
{
"name": "丁一",
},
}
//使用切片前必須初始化
m = make([]map[string]string, 5)
//初始化map
m[0] = make(map[string]string)
m[0]["name"] = "狗二"
//切片是有序的,append在切片的末尾新增
m = append(m, map[string]string{
"name": "張三",
})
fmt.Println(m)
}
map排序
注意!!!, 新版的Golang
, 如果key是數值型別按照從小到大排序, 如果是字元或是字串按照字典序
func main() {
//key如果是數字按照從小到達, 如果是字串按照字典序排序
m := map[string]int{
"z":100,
"abc": 200,
"ab": 12,
"za": 399,
"ba": 231,
}
fmt.Println(m)
}
舊版
func main() {
m := map[int]int{
1: 200,
10: 12,
4: 399,
2: 231,
}
fmt.Println(m)
var keys []int
for key, _ := range m {
keys = append(keys, key)
}
//將int slice按照從小到大排序
sort.Ints(keys)
fmt.Println(keys)
for _, val := range keys {
fmt.Println(val,m[val])
}
}