目录
map
一. map简介
key-value的数据结构,又叫字典或关联数组。
声明: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->类似于二维数组。
二. map相关操作
声明、插入、查找、遍历、删除和长度。
package main
import "fmt"
func main() {
var a map[string]string
a = make(map[string]string, 10)
a["hello"] = "world" //插入
fmt.Println(a)
val, _ := a["hello"] //查找
fmt.Println("value:", val)
for k, v := range a { //遍历
fmt.Println(k, v)
}
length := len(a) //长度
fmt.Println(length)
delete(a, "hello") //删除
fmt.Println(a)
a["abc"] = "efg" //添加
a["abc1"] = "efg"
a["abc2"] = "efg"
fmt.Println(a)
}
三. map为引用类型
由下面代码和结果可知:map为引用类型。
package main
import "fmt"
func modify(a map[string]map[string]string) {
_, ok := a["zhangsan"]
if !ok {
a["zhangsan"] = make(map[string]string)
}
a["zhangsan"]["age"] = "21"
return
}
func testMap() {
a := make(map[string]map[string]string, 10)
modify(a)
fmt.Println(a)
}
func main() {
testMap()
}
四. Map的遍历
package main
import "fmt"
func testMap() {
a := make(map[string]map[string]string, 10)
a["key1"] = make(map[string]string)
a["key1"]["key2"] = "one"
a["key1"]["key3"] = "two"
for k, v := range a {
fmt.Println(k)
for k1, v1 := range v {
fmt.Println(k1, v1)
}
}
}
func main() {
testMap()
}
五. map排序
先获取所有key,把key进行排序;再按照排序好的key,进行遍历。
package main
import (
"fmt"
"sort"
)
func testMapsort() {
a := make(map[int]int, 10)
a[1] = 2
a[5] = 5
a[3] = 10
a[8] = 4
fmt.Println(a)
var keys []int
for k, _ := range a {
keys = append(keys, k)
}
sort.Ints(keys)
for _, v := range keys {
fmt.Println(v, a[v])
}
}
func main() {
testMapsort()
}
六. slice of map
package main
import (
"fmt"
)
func testMap() {
var a []map[int]int
a = make([]map[int]int, 5)
for i := 0; i < 5; i++ {
a[i] = make(map[int]int)
}
a[0][0] = 0
a[0][1] = 1
a[1][0] = 2
fmt.Println(a)
}
func main() {
testMap()
}