go 声明(声明是不会分配内存的,初始化需要make
)
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 testMap2() {
a := make(map[string]map[string]string, 100)
a["key1"] = make(map[string]string)
a["key1"]["key2"] = "abc"
a["key1"]["key3"] = "abc"
a["key1"]["key4"] = "abc"
a["key1"]["key5"] = "abc"
fmt.Println(a)
}
func modify(a map[string]map[string]string) {
_, ok := a["zhangsan"] //查找
if !ok {
a["zhangsan"] = make(map[string]string)
}
a["zhangsan"]["passwd"] = "123456"
a["zhangsan"]["nickname"] = "pangpang"
return
}
func testMap3() {
a := make(map[string]map[string]string, 100)
modify(a)
fmt.Println(a)
}
func trans(a map[string]map[string]string) {
for k, v := range a {
fmt.Println(k)
for k1, v1 := range v {
fmt.Println("\t", k1, v1)
}
}
}
func testMap4() {
a := make(map[string]map[string]string, 100)
a["key1"] = make(map[string]string)
a["key1"]["key2"] = "abc"
a["key1"]["key3"] = "abc"
a["key1"]["key4"] = "abc"
a["key1"]["key5"] = "abc"
a["key2"] = make(map[string]string)
a["key2"]["key2"] = "abc"
a["key2"]["key3"] = "abc"
trans(a)
delete(a, "key1")
fmt.Println("-----")
trans(a)
fmt.Println(len(a))
}
func testMap5() {
var a []map[int]int
a = make([]map[int]int, 5)
fmt.Println(a)
if a[0] == nil {
a[0] = make(map[int]int)
}
a[0][10] = 10
fmt.Println(a)
}
func main() {
//testMap2() //map[key1:map[key2:abc key3:abc key4:abc key5:abc]]
//testMap3() //map[zhangsan:map[nickname:pangpang passwd:123456]]
testMap4()
//testMap5()
}
map排序和反转
package main
import (
"fmt"
"sort"
)
func testMapSort() {
var a map[int]int
a = make(map[int]int, 5)
a[8] = 10
a[3] = 10
a[2] = 10
a[1] = 10
a[18] = 10
var keys []int
for k, _ := range a {
keys = append(keys, k)
}
fmt.Println(keys) // [8 3 2 1 18]
sort.Ints(keys)
for _, v := range keys {
fmt.Println(v, a[v])
}
}
func testMapSort1() {
var a map[string]int
var b map[int]string
a = make(map[string]int, 5)
b = make(map[int]string, 5)
a["abc"] = 101
a["efg"] = 10
for k, v := range a {
b[v] = k
}
fmt.Println(b)
}
func main() {
// map排序
testMapSort()
// map反转
testMapSort1() // map[10:efg 101:abc]
}
打印结果:
[8 3 2 1 18]
1 10
2 10
3 10
8 10
18 10
map[10:efg 101:abc]