Go 基础教程--8-map
map
类似其它语言中的哈希表或者字典,以key-value形式存储数据
Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
Map使用make()创建,支持 := 这种简写方式
make([keyType]valueType, cap),cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数
键值对不存在时自动添加,使用delete()删除某键值对
使用 for range 对map和slice进行迭代操作
实例1:
package main
import "fmt"
func main() {
//var m map[int]string
////m = map[int]string{}
//m = make(map[int]string)
//fmt.Println(m)//map[]
//var m map[int]string = make(map[int]string)
//fmt.Println(m)//map[]
m := make(map[int]string)
fmt.Println(m)//map[]
m := make(map[int]string)
//fmt.Println(m)
m[1] = "ok"
a := m[1]
fmt.Println(a)//ok
fmt.Println(m)//map[1:ok]
m := make(map[int]string)
a := m[1]
fmt.Println(a)//
}
实例2:
package main
import "fmt"
func main() {
m := make(map[int]string)
m[1] = "ok"
delete(m,1)
a := m[1]
fmt.Println(a)
}
//
实例3:
多级map都需要初始化
package main
import "fmt"
func main() {
var m map[int]map[int]string
m = make(map[int]map[int]string)
a, ok := m[2][1]
if !ok {
m[2] = make(map[int]string)
}
m[2][1] = "good"
a, ok = m[2][1]
fmt.Println(a,ok)
}
//good true
实例4:
迭代操作
package main
import "fmt"
func main() {
//for k,v := range map {
// map[k][v]
//}
sm := make([]map[int]string,5)
for _, v := range sm {
v = make(map[int]string,1)
fmt.Println(v)
}
fmt.Println(sm)
}
//--
map[]
map[]
map[]
map[]
map[]
[map[] map[] map[] map[] map[]]
--//
//说明v是拷贝,没有改变值
sm := make([]map[int]string,5)
for _, v := range sm {
v = make(map[int]string,1)
v[1] = "ok"
fmt.Println(v)
}
fmt.Println(sm)
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//[map[] map[] map[] map[] map[]]
实例2:
package main
import (
"fmt"
"sort"
)
func main() {
//for k,v := range map {
// map[k][v]
//}
//sm := make([]map[int]string,5)
//for _, v := range sm {
// v = make(map[int]string,1)
// v[1] = "ok"
// fmt.Println(v)
//}
//fmt.Println(sm)
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//[map[] map[] map[] map[] map[]]
//sm := make([]map[int]string,5)
//for i := range sm {
// sm[i] = make(map[int]string,1)
// sm[i][1] = "ok"
// fmt.Println(sm[i])
//}
//fmt.Println(sm)
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//map[1:ok]
//[map[1:ok] map[1:ok] map[1:ok] map[1:ok] map[1:ok]]
//间接排序
m := map[int]string{1:"a",2:"b",3:"c",4:"d",5:"e"}
s := make([]int,len(m))
i := 0
for k, _ := range m {
s[i] = k
i++
}
sort.Ints(s)
fmt.Println(s)
//[1 2 3 4 5]
}
课堂作业
根据在 for range 部分讲解的知识,尝试将类型为map[int]string
的键和值进行交换,变成类型map[string]int
程序正确运行后应输出如下结果:
package main
import "fmt"
func main() {
m1 := map[int]string{1:"a",2:"b",3:"c",4:"d",5:"e"}
fmt.Println(m1)
m2 := make(map[string]int)
for k,v := range m1 {
m2[v] = k
}
fmt.Println(m2)
}
//map[1:a 2:b 3:c 4:d 5:e]
//map[a:1 b:2 c:3 d:4 e:5]
本作品采用《CC 协议》,转载必须注明作者和本文链接