Go(4 [Map])

Map簡介:

 key-value的數據結構,又叫字典或關聯數組

Map數據結構:

    map是引用類型

寫法:var map1 map[keytype]valuetype

一:字典聲明

注意:聲明是不會分配內存的,初始化需要make

所以:可以簡寫爲 test :=make(map[string]int,10)

    --> 創建一個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排序

  1. 先獲取所有key,把key排序

  2. 按照拍好序的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章