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