07- Go语言基础之map
Go 语言中提供的映射管理为map , 其内部结构使用散列表(hash) 实现.
map 是一种无序的 基于key-value 的数据结构, Go 语言中的map 是引用类型, 必须初始化才能使用.
map 定义
语法:
map[keyType]valueType
- keyType: 表示键的类型.
- valueType: 表示键对应值得类型
map 类型的变量初始值为nil. 需要使用make()函数来分配内存.
make(map[keyType]valueType, [cap])
其中cap 表示 map 的容量, 改参数虽然不是必须的, 但是我们应该在初始化map 的时候就为其指定一个合适ide容量.
map基本使用
map 中的数据都是成对出现的.
func main() {score := make(map[string]int, 8)score["张三"] = 90score["李四"] = 100fmt.Println(score)fmt.Println(score["张三"])fmt.Printf("type of a:%T\n", score)}
输出:
map[张三:90 李四:100]90type of a:map[string]int
map 也支持在声明的时候填充元素.
func main() {score := map[string]int{"张三":10,"李四":20,}}
判断某个键是否存在
value, ok := map[key]
举例:
func main() {score := map[string]int{"张三":10,"李四":20,}v,ok := score["王五"]if ok {fmt.Println(v)} else {fmt.Println("查无此人")}}
map的遍历
Go 语言中使用 for range 遍历 map
func main() {score := map[string]int{"张三":10,"李四":20,}for k, v := range score {fmt.Println(k,v)}}
当我们只想遍历key的时候, 可以按照下面写法:
func main() {score := map[string]int{"张三":10,"李四":20,}for k := range score {fmt.Println(k)}}
注意
遍历map 元素的顺序与添加键值对的顺序无关.
删除键值对 delete() 函数
使用delete() 内建函数从map 中删除键值对
delete(map, key)
- map就是要被删除键值对的map
- key, 要删除键值对的key
func main() {score := map[string]int{"张三":10,"李四":20,}delete(score, "李四")for k := range score {fmt.Println(k)}}
按照指定顺序遍历map
func main() {rand.Seed(time.Now().UnixNano()) // 初始化随机种子var score = make(map[string]int, 200)for i :=0; i<100; i++ {key := fmt.Sprintf("stu%02d", i)value := rand.Intn(100)score[key] = value}var keys = make([]string, 0, 200)for key := range score {keys = append(keys, key)}sort.Strings(keys)for _, key := range keys {fmt.Println(score[key])}}
元素为map类型的切片
func sliceMap() {var mapSlice = make([]map[string]string, 3)for i, v := range mapSlice {fmt.Printf("index :%d value: %v \n", i, v)}fmt.Println("after init")// 对切片中的map 进行初始化mapSlice[0] = make(map[string]string, 10)mapSlice[0]["name"] = "七里塘"mapSlice[0]["age"] = "18"mapSlice[0]["address"] = "仙界"for index, value := range mapSlice {fmt.Printf("index:%d value: %v \n", index, value)}}
