map定义
map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用
map[KeyType]ValueType
- KeyType:表示键的类型。
- ValueType:表示键对应的值的类型。
基本使用
package main
import "fmt"
// map
func main() {
var m1 map[string]int
fmt.Println(m1 == nil) // 还没有初始化(没有在内存中开辟空间)
m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
m1["MoCo"] = 18
m1["Adminxe"] = 22
fmt.Println(m1)
fmt.Println(m1["MoCo"])
}
判断某个键是否存在
package main
import "fmt"
// map
func main() {
var m1 map[string]int
fmt.Println(m1 == nil) // 还没有初始化(没有在内存中开辟空间)
m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
m1["MoCo"] = 18
m1["Adminxe"] = 22
fmt.Println(m1)
fmt.Println(m1["MoCo"])
//判断某个键是否存在
//约定成俗用OK接收返回的布尔值
fmt.Println(m1["Azjj"]) //如果不存在这个key拿到对应值类型的零值
value, ok := m1["Azjj"]
if !ok {
fmt.Println("查无此key")
} else {
fmt.Println(value)
}
}
map的遍历
package main
import "fmt"
// map
func main() {
var m1 map[string]int
fmt.Println(m1 == nil) // 还没有初始化(没有在内存中开辟空间)
m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
m1["MoCo"] = 18
m1["Adminxe"] = 22
fmt.Println(m1)
fmt.Println(m1["MoCo"])
//map的遍历
for k, v := range m1 {
fmt.Println(k, v)
}
//只遍历key
for k := range m1 {
fmt.Println(k)
}
//只遍历value
for _, v := range m1 {
fmt.Println(v)
}
}
delete()函数删除键值对
delete(map, key)
- map:表示要删除键值对的map
- key:表示要删除的键值对的键
package main
import "fmt"
// map
func main() {
var m1 map[string]int
fmt.Println(m1 == nil) // 还没有初始化(没有在内存中开辟空间)
m1 = make(map[string]int, 10) //要估算好该map容量,避免在程序运行期间再动态扩容
m1["MoCo"] = 18
m1["Adminxe"] = 22
//删除
delete(m1, "Adminxe")
fmt.Println(m1)
delete(m1, "Azjj") // 删除不存在的key
//内建函数delete按照指定的键将元素从映射中删除。若m为nil或无此元素,delete不进行操作。
}
指定顺序遍历map
将一堆无序的值有序的遍历出来
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) //初始化随机数种子
var scoreMap = make(map[string]int, 200)
for i := 0; i < 100; i++ {
key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
value := rand.Intn(100) //生成0~99的随机整数
scoreMap[key] = value
}
//fmt.Println(scoreMap)
//取出map中的所有key存入切片keys
var keys = make([]string, 0, 200)
for key := range scoreMap {
keys = append(keys, key)
}
//对切片进行排序
sort.Strings(keys)
//按照排序后的key遍历map
for _, key := range keys {
fmt.Println(key, scoreMap[key])
}
}
元素为map类型的切片
package main
import "fmt"
//map和slice组合
func main() {
//元素类型为map的切片
var s1 = make([]map[int]string, 10, 10)
s1[0] = make(map[int]string, 1)
s1[0][10] = "MoCo"
fmt.Println(s1)
}
值为切片类型的map
package main
import "fmt"
//map和slice组合
func main() {
//值为切片类型的map
var m1 = make(map[string][]int, 10)
m1["Adminxe"] = []int{10, 20, 30}
fmt.Println(m1)
}
参考链接
https://www.liwenzhou.com/posts/Go/08_map/
转载请注明:Adminxe's Blog » Go语言学习–Map