- 初识Map
m := map[string]string{
"name": "xiaoming",
"course": "golang",
}
- Map的结构:
1> map[K的类型]V的类型
2> 复合Map map[K1]map[K2]V
- Map的创建:
方式一
m := map[string]string{
"name": "xiaoming",
"course": "golang",
}
方式二 (常用)
m := make(map[int]string) // m==empty map
方式三
var m map[string]int // m==nil go中的nil是可以参与运算的,这和其它语言中的null不同
- Map的遍历
- go中,Map是一个无序的字典,每次遍历出的结果可能都不一样,如需顺序,需要手动给key排序(将key放到一个slice中,slice是有序的)
- 可以通过len(m)获得m中元素的个数
for k, v := range m{
}
for k := range m{
}
for _, v := range m{
}
- 从Map中取值 : m[k]
- go中,每创建一个变量后,系统都会自动为其设置一个"Zero value",所以go中的变量不做初始化也可以正常使用 v, ok := m[k]
- 在从Map中取值时,最好先做个存在性判断,因为即使从一个原本不存在的key中获取值,程序也不会报错,只不过是为你返回的是值原本的"Zero value"
if v, ok := m[k]; ok { // key的存在性检验,如果key存在,则返回的ok为 "true"
//operate v
} else {
fmt.Println("no exist key")
}
- Map的删除操作,用delete()删除一个key
delete(m, k的值) //删除m中 key == k 的元素
- Map中可以作为Key的类型
- 由于Map使用哈希表,所以Key必须可以比较相等
- 除了slice, map, function 的内建类型都可以作为Key的类型
- Struct类型若其field 不包含"slice, map, function",也可以 作为Key的类型
注:Java中,要作为Key的类型必须重写hashCode()和equals()方法以便可以比较相等,而go中比较简单,只需满足上述条件即可