简介
map最常见的实现有tree-map与hash-map。在golang中map是一个内置类型,实现方法为hash-map
声明语义
var mymap map[string]string
如上的代码声明了一个map,map会被初始化为零值nil
。注意:nil-map不能进行插入元素等操作。
初始化方法
map1 := make(map[string]string)
map2 := make(map[string]string, 5) // 存储空间为5
map1 := map[string]string{"1": "one", "2": "two"}
map1 := map[string]string{"1": "one", "2": "two"}
map2 := map1
值得注意的是,上面的代码中使用map1初始化map2时,修改map2也会导致map1的改变(包含了增删改等操作),也就是说,map1和map2完全是同一个对象。
赋值
map1 := map[string]string{"1": "one", "2": "two"}
var map2 map[string]string
map2 = map1
注意,上面的将map1赋值给map2后,修改map2也会导致map1的改变,也就是说,map1和map2完全是同一个对象。
遍历
使用for循环来遍历map
map1 := map[string]string{"1": "one", "2":"two"}
for key, value := range map1 {
fmt.Println(key, value)
}
其他操作
如果key不存在,则使用中括号的赋值操作,可以直接添加元素到map中
map1 := map[string]string{"1": "one", "2":"two"}
map1["3"] = "three" // 添加元素
map1["1"] = "One" // 修改元素
使用delete函数,可以删除map中的元素
map1 := map[string]string{"1": "one", "2":"two"}
delete(map1, "1")
map1 := map[string]string{"1": "one", "2":"two"}
value, exists := map1["1"]
if exists {
fmt.Println(value)
} else {
fmt.Println("key does not exist")
}
keys := reflect.ValueOf(abc).MapKeys() // slice