這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ( "fmt")/* map -類似其他語言中的雜湊表或者字典,用key-value形式儲存資料 -Key必須是支援==或者!=比較運算的類型,不可以是函數,map或者slice -Map尋找比線性搜尋快ihenduo,但比使用索引訪問資料的類型慢100倍 -Map使用make()建立,支援:=這種簡寫方式 -make([KeyType]valueType,cap),cap表示容量,可省略 -超出容量時會自動擴容,但盡量提供一個合理的初始值 -使用len()擷取元素個數 -索引值對不存在時自動添加,使用delete()刪除某索引值對 -使用for range對map和slice進行迭代操作*/func main() { var m map[int]string m = map[int]string{} fmt.Println(m) //完成了一個map的初始化 var n map[int]string n = make(map[int]string) fmt.Println(n) //也可以用make來建立 p := make(map[int]string) fmt.Println(p) //也是可以的 fmt.Println("-----") m[1] = "OK" a := m[2] fmt.Println(a) //輸出空 fmt.Println(m[1]) delete(m, 1) //刪除 fmt.Println(m[1]) //刪除後輸出空 //簡單map的操作 fmt.Println("-----")}
package mainimport ( "fmt")func main() { var m map[int]map[int]string //這裡建立了兩層map m = make(map[int]map[int]string) //這裡只初始化了一層map a, ok := m[2][1] //只有一個傳回值的時候返回的是取到的值,第二個傳回值返回是否索引值對存在 if !ok { //如果ok不存在,對map的第二層進行初始化 m[2] = make(map[int]string) } m[2][1] = "good" a, ok = m[2][1] fmt.Println(a, ok) //複雜的map操作}
slice 下的 for-range
package mainimport ( "fmt")func main() { for i, v := range slice { //返回slice相對應的索引,i相當於計數器,v相當於slice所儲存的值,是拷貝,不會影響slice本身 //可以通過slice[i]對slice本身進行操作 }}
map下的for-range
package mainimport ( "fmt")func main() { for k, v := range map { //返回k,v索引值對(同樣是拷貝) //當然可以對m[k]直接對map進行操作 }}
for-range為map初始化
package mainimport ( "fmt")func main() { sm := make([]map[int]string, 5) //這是一個以map為元素的切片,初始化容量、元素為5 for _, v := range sm { v = make(map[int]string, 1) v[1] = "ok" fmt.Println(v) } fmt.Println(sm) /* 輸出結果 map[1:ok] map[1:ok] map[1:ok] map[1:ok] map[1:ok] [map[] map[] map[] map[] map[]] 顯然v是拷貝的,無法對map本身進行操作 如果要對本身操作,需要做如下修改(利用i) */ smm := make([]map[int]string, 5) for i := range sm { smm[i] = make(map[int]string, 1) smm[i][1] = "ok" fmt.Println(smm[i]) } fmt.Println(smm)}
對map的間接排序
package mainimport ( "fmt" "sort")func main() { //對map的間接排序 m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"} s := make([]int, len(m)) i := 0 for k, _ := range m { s[i] = k i++ } //已經將map存入slice中 fmt.Println(s) //每次列印發現不同,體現map的無序性 sort.Ints(s) //對slice排序 fmt.Println(s) //每次列印出來的是有序的 //我們只能實現對map的間接排序,因為map是無序的,我們只能提取後排序 fmt.Println(m)}