map
Map类型
key-value的数据结构,又叫字典
声明
var map1 map[keytype]valuetype
例子:
var a map[string]string
var a map[string]int
注意:声明是不会分配内存的需要make初始化
初始化的两种方式:
var map[string]string = map[string][string]{"hello","world"}
或:
var a = make(map[string]string,10)
插入和更新
a["hello"] = "world"
查找
val,ok := a["hello"] // 如果有值的话ok 为true 没有的话为nil val为一个空map
遍历
for k,v := range a{
fmt.println(k,v)
}
删除
delete(a,"hello")
这个操作是安全的,及时这个元素不存在也不会报错,如果一个查找失败将返回value类型对应的零值
长度
len(a)
map是引用类型
注意:map中的元素并不是一个变量,所以我们不能对map的元素进行取址操作
声明 map 的两种方式
package main
import "fmt"
func testMap() {
// 方式 1
var a map[string]string
a = make(map[string]string,10)
// 方式 2
//a := make(map[string]string, 10)
a["abc"] = "efg"
a["abc"] = "efg"
a["abc1"] = "efg"
fmt.Println(a)
}
func main() {
testMap()
}
输出结果如下

嵌套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 main() { testMap2() }
输出结果如下

判断一个key是否在map中
如果有值的话ok 为true 没有的话为nil val为一个空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"]["passwd"] = "123456" a["zhangsan"]["nickname"] = "pangpang" return } func testMap3() { a := make(map[string]map[string]string, 100) modify(a) fmt.Println(a) } func main() { testMap3() }
输出结果如下

遍历嵌套map和删除map中的一个key
package main import "fmt" 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 main() { testMap4() }
输出结果如下

slice是map类型
package main import "fmt" func testMap5() { var a []map[string]int a = make([]map[string]int, 5) if a[0] == nil { a[0] = make(map[string]int) } a[0]["age"] = 26 fmt.Println(a) } func main() { testMap5() }
输出结果如下

map 排序
先获取所有key,把key进行排序,按照排序好的key,进行遍历
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(k, v) } sort.Ints(keys) for _, v := range keys { fmt.Println(v, a[v]) } } func main() { testMapSort() //testMapSort1() }
输出结果如下

map 反转 就是 key 和 value 互换位置
声明另一个map存取互换后的即可
package main
import (
"fmt"
"sort"
)
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() {
testMapSort1()
}
输出结果如下


浙公网安备 33010602011771号