一、概念
- 简述
1、map 是一种无序的键值对的集合。(类似于python的字典dict)
2、map 的key 与 value 都是有类型的,且定义阶段时就已经统一
- 定义方式
# 方式一
var mapName map[key_type]value_type
mapName = make(map[key_type]value_type)
// 如
// var user map[string]string
// user = make(map[string]string)
# 方式二 简短声明
mapName := make(map[key_type]value_type)
// 如
// student := make(map[string]int)
# 方式三
mapName := map[key_type]value_type{}
// 如
// user := map[string]string{"jmz":"上海"}
二、声明、初始化、make
- map 也是引用类型,需要make 创建内存
package main
import "fmt"
func main(){
var user map[string]string
user = make(map[string]string)
user["jmz"] = "安工大"
user["jly"] = "上核大"
fmt.Println(user)
data := make(map[string]int)
data["info1"] = 32
data["info2"] = 23
fmt.Println(data)
student := map[string]int{"jmz":23}
fmt.Println(student)
}
三、map的增删改查
package main
import "fmt"
func main(){
// 简短声明
student := map[string]string{}
// 增
student["jmz"] = "上海"
student["qqc"] = "北京"
student["gka"] = "湖北"
// 改
student["jmz"] ="河南"
// 查
// 判断键是否存在
v,ok := student["jms"] // ok == true 则jms 键存在对应的value
if ok {
fmt.Println(v)
}
// for-range
for k,v := range student{
fmt.Printf("key:%s,value:%s
",k,v)
}
//你会发现map的输出 是无序的,因为本来map就无序,想要有序请使用 切片
// 删
delete(student,"jmz") // 不存在的键删除 也不会报错
// delete(student,"lll") // 不会报错
fmt.Println(student)
}
四、map 之函数
- map 用法一
package main
import "fmt"
func main(){
// 简短声明
s := "中国是一个美丽的国家,China is a beautiful country"
info := runeCount(s)
for k,v := range info{
fmt.Printf("%s : %d
",string(k),v)
}
}
// 字符串,解析每个字符的个数
func runeCount(s string)map[rune]int{
info := map[rune]int{}
for _,v := range []rune(s){
info[v]++
}
return info
}
- map 用法二 键值对调
package main
import (
"fmt"
)
var (
barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
"delta": 87, "echo": 56, "foxtrot": 12,
"golf": 34, "hotel": 16, "indio": 87,
"juliet": 65, "kili": 43, "lima": 98}
)
func main() {
invMap := make(map[int]string, len(barVal))
for k, v := range barVal {
invMap[v] = k
}
fmt.Println("inverted:")
for k, v := range invMap {
fmt.Printf("Key: %v, Value: %v / ", k, v)
}
}
如果喜欢看小说,请到183小说网