Go map
map是key-val数据结构
var map 变量名 map[keytype]valtype
其中key可以是很多种类型,例如bool、数字、string、channel、指针、接口、结构体、数组等等,但是切片、map、func不可以,因为这些不能用来查找
value 通常为数字、string、map、struct
package main
import(
"fmt"
)
func main(){
var a map[string]string
//map 在使用之前一定要make
a = make(map[string]string,5)
a["name"] = "fly"
a["age"] = "18"
a["hobby"] = "golang"
fmt.Println(a)
}//输出:map[age:18 hobby:golang name:fly]
注意map在使用之前一定要make,make是为了分配空间
map的key是不能重复的,否则会覆盖
map的key-val是无序的
map的make的第二个参数可以是0,map的长度是自动增长的
使用map[string]map[string]string map存储map
//国家省会城市
package main
import(
"fmt"
)
func main(){
var area map[string]map[string]string
area = make(map[string]map[string]string)
//省-省会城市
china := make(map[string]string)
china["湖北"] = "武汉"
china["浙江"] = "杭州"
china["江苏"] = "南京"
area["中国"] = china
fmt.Println(area)
}//输出:map[中国:map[江苏:南京 浙江:杭州 湖北:武汉]]
map的删除:
1. delete(map,key)
delete(area,"中国")
2.删除所有key的便捷方法
area = make(map[string]map[string]string)
使用make重新make一下,重新分配一块内存,之前的内存被gc回收
3.map的查找
if val, ok := area["美国"];!ok{
fmt.Println("val not found")
}
4. map的遍历,也是用for range
5.map切片
func UsrInfo(){
Usr := make([]map[string]string,5)
//创建第一个用户信息
Usr[0] = make(map[string]string,2)
Usr[0]["name"] = "小明"
Usr[0]["age"] = "18"
//创建第二个用户信息
Usr[1] = make(map[string]string,2)
Usr[1]["name"] = "小芳"
Usr[1]["age"] = "22"
//创建第三个用户信息
Usr[2] = make(map[string]string,2)
Usr[2] = map[string]string{
"name":"小张",
"age":"11",
}
}
6.map的排序
先将map的key保存到切片中,然后用sort进行排序,然后通过遍历排序后切片中的值作为map的key进行遍历
package main
import(
"fmt"
"sort"
)
func main(){
var mymap = make(map[int]int)
mymap[1] = 99
mymap[10] = 12
mymap[6] = 13
mymap[99] = 1
mymap[21] = 0
fmt.Println(mymap)
//use sort
var keys []int
for k,_ := range mymap{
keys = append(keys,k)
}
sort.Ints(keys)
for _,k := range keys{
fmt.Printf("mymap[%v]=%v\n",k,mymap[k])
}
}

注意:map是引用类型,当map作为参数传递时,函数内修改map,也会修改原来的map的内容
map到达一定的容量后会自动扩容,并不会出现panic
map的key经常用struct类型,适合管理复杂的数据

浙公网安备 33010602011771号