Map简介:css
key-value的数据结构,又叫字典或关联数组
c#
Map数据结构:
数组
map是引用类型
数据结构
写法:var map1 map[keytype]valuetypeapp
一:字典声明ide
注意:声明是不会分配内存的,初始化须要make函数
因此:能够简写为 test :=make(map[string]int,10)spa
--> 建立一个test字典: key类型为string,value类型为int,长度为10. (若是超出会panic,index out of range)
排序
var map1 map[keytype]valuetype
var a map[string]string
var a map[string]int
var a map[int]string内存
var a map[string]map[string]string
var a map[string]int a = make(map[string]int,10) a["abc"] = 200 a["abc"] = 1200 a["hello"] = 222
二:Map操做
var c map[string]string = map[string]string{"hi":"word"} c["cc"] = "aaa"
插入:
a[“hello”] = “world”
查找:
//字典查找:经过key查找val. // --返回2个元素,一个是val,一个是布尔值 //字典查找key时,若是只指定一个返回值,那找不到就是0 //这种方法,很差肯定,若是val是0呢? 那就尴尬了 Val,exist:= a[“hello”] if exist{ fmt.Printf("val=%d\n",ok) }else { fmt.Printf("not found %s\n",val) }
遍历:
for k,v :=range a{ fmt.Println("for",k,v) }
删除:
//a字典 //hello is key delete(a,"hello")
长度:len(a)
示例:函数传递字典
func test2(a map[string]int) { a["one"] = 134 } func mian(){ //map 是引用类型,全部会修改原有map a := make(map[string]int,10) test2(a) }
三:map中建立切片
栗子1:
func test4() { aa := make([]map[int]int, 5) for i := 0; i < 5; i++ { aa[i] = make(map[int]int) aa[i][2] = 2 } fmt.Println("test4",aa) } >>> test4 [map[2:2] map[2:2] map[2:2] map[2:2] map[2:2]]
栗子2:
func test3() { //建立切片, //切片里面放置map //默认map都是nil,须要赋值 s:=make([]map[string]int,10) for i:=0;i<len(s);i++{ //赋值初始化 //100是map的容量.若是超了。底层会自动扩容 s[i] = make(map[string]int,100) } s[0]["aaa"]=100 s[0]["acc"]=100 s[0]["1aa"]=100 s[2]["ccc"]=100 fmt.Println("sss",s) } >>> sss [map[aaa:100 acc:100 1aa:100] map[] map[ccc:100] map[] map[] map[] map[] map[] map[] map[]]
四:Map排序
先获取全部key,把key排序
按照拍好序的key,进行遍历
var keys []string for k, v := range a { fmt.Printf("a[%s] = %d\n", k, v) keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { fmt.Printf("Sort,a[%s]=%d\n", k, a[k]) }
声明是不会分配内存的,初始化须要make