map是key-value数据结构,是一种无序的键值对的集合
1、基本语法
var 变量名 map[keytype]valuetype
注意:slice,map还有function不可以作为key,因为这几个没法用==来判断
var a map[string]string var b map[int]string var c map[int]int var d map[string]int var e map[string]map[string]string
2、使用方式
2.1 先声明后赋值
func main() {
var myMap map[string]string
myMap = make(map[string]string, 2)
myMap["name"] = "小明"
myMap["age"] = "18"
fmt.Printf("myMap=%v\n", myMap)
}
2.2 声明时直接make
func main() {
myMap := make(map[string]string, 2)
myMap["name"] = "小明"
myMap["age"] = "18"
fmt.Printf("myMap=%v\n", myMap)
}
2.3 声明时直接赋值
func main() {
myMap := map[string]string{
"name": "小明",
"age": "18",
}
fmt.Printf("myMap=%v\n", myMap)
}
3、map的增删改查
3.1 map[key] = value //如果key还没有就是增加,如果key存在就是修改。
3.2 删除,使用内置函数delete()
func delete(m map[Type]Type1, key Type)
如果key存在,就会删除该key-value,如果key不存在,不操作,但是也不会增加
func main() {
myMap := map[string]string{
"name": "小明",
"age": "18",
}
delete(myMap, "name")
fmt.Printf("myMap=%v\n", myMap)
}
如果要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除
或者map = make(...),make一个新的map,让原来的称为垃圾,被gc回收
3.3 map查找
func main() {
myMap := map[string]string{
"name": "小明",
"age": "18",
}
value, ok := myMap["name"]
if ok {
fmt.Printf("myMap=%v\n", value)
} else {
fmt.Println("没找到")
}
}
如果myMap这个map中存在"name",那么ok就会为true,否则为false
4、map的遍历
使用for-range来遍历
func main() {
myMap := map[string]string{
"name": "小明",
"age": "18",
}
for key, value := range myMap {
fmt.Printf("key=%v,value=%v\n", key, value)
}
}
5、map切片
切片的类型如果是map,则我们称为slice of map,map切片,这样使用则map个数就可以动态变化了
func main() {
mapSlice := make([]map[string]string, 2)
mapSlice[0] = map[string]string{
"name": "小明",
"age": "18",
}
mapSlice[1] = map[string]string{
"name": "小红",
"age": "19",
}
newMap := map[string]string{
"name": "小王",
"age": "20",
}
// 动态添加map
mapSlice = append(mapSlice, newMap)
fmt.Printf("mapSlice=%v\n", mapSlice)
}
6、map排序
golang中没有专门的方法针对map的key进行排序
golang中的map默认是无需的,也不是按照添加的顺序存放的,每次遍历,得到的输出可能不一样。
golang中的排序,是先对key进行排序,然后根据key遍历输出即可
func main() {
var intMap map[int]int = make(map[int]int, 10)
intMap[0] = 12
intMap[8] = 15
intMap[9] = 10
intMap[7] = 23
intMap[5] = 12
intMap[6] = 50
intMap[3] = 78
intMap[1] = 10
intMap[2] = 82
intMap[4] = 30
// 无序的
fmt.Println("排序前················")
for key, value := range intMap {
fmt.Printf("key=%v,value=%v\n", key, value)
}
fmt.Println("排序前················")
// 1.先将map的key放到切片中
// 2.对切片进行排序
// 3.遍历切片,然后按照key来输出map的值
keySlice := make([]int, 10)
for key, _ := range intMap {
keySlice = append(keySlice, key)
}
sort.Ints(keySlice)
fmt.Println("排序后················")
for _, key := range keySlice {
fmt.Printf("key=%v,value=%v\n", key, intMap[key])
}
fmt.Println("排序后················")
}
浙公网安备 33010602011771号