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类型,适合管理复杂的数据

 

posted @ 2020-04-02 18:31  醉深梦始  阅读(200)  评论(0)    收藏  举报