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() }
输出结果如下