定义

集合(Map):Map 是一种无序的键值对的集合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
m := map[string]string{
    "name":   "bing",
    "course": "golang",
    "site":   "codingbing",
}
m2 := make(map[string]int)
var m3 map[string]int

fmt.Println(m, m2, m3)
// 结果
map[name:bing course:golang site:codingbing] map[] map[]

遍历

1
2
3
4
5
6
7
for k, v := range m {
    fmt.Println("k,v=", k, v)
}
// 结果
k,v= name bing
k,v= course golang
k,v= site codingbing

操作

获取某个 key 的值

1
2
3
4
course, ok := m["course"]
fmt.Println(course, ok)
// 结果
golang true

判断 key 是否存在

1
2
3
4
5
6
7
if caurse, ok := m["caurse"]; ok {
    fmt.Println(caurse)
} else {
    fmt.Println("key does not exist")
}
// 结果
key does not exist

删除某个 key 的值

1
2
3
4
5
6
delete(m, "name")
name, ok := m["name"]
fmt.Println(name, ok)

// 结果
 false

小结

  • 创建:make(map[string]int)
  • 使用 range 遍历 key,或者遍历 key,value 对(不保证遍历顺序)
  • 使用 len 获得元素个数
  • 获取元素:m[key]
  • key 不存在时,获得 value 类型的初始值
  • value,ok := m[key] 来判断 key 是否存在
  • delete 删除一个 key

map 的 key

  • map 使用哈希表,必须可以比较相等
  • 除了 slice、map、function 的内建类型都可以作为 key
  • Struct 类型不包含上述字段,也可作为 key