Go语言中提供的映射关系容器为map,其内部使用散列表hash实现 map
map是一种无序的基于key-value的数据结构,必须初始化才能使用
package main
import "fmt"
func main() {
// map的基本使用,map是引用类型,需要初始化,map可以自动扣扩容
// 初始化map,第一个参数是map的类型,第二个参数是map的容量
//容量要尽量的估算准确,不然就会在代码运行期间扩容,造成性能的下降
mapp := make(map[int]string, 3)
mapp[1] = "a"
mapp[2] = "b"
fmt.Println(mapp)
//在声明的时候添加元素
map1 := map[int]int{
1: 1,
2: 2,
3: 3,
}
fmt.Println(map1)
// 判断某一个值是否存在
//返回两个参数,1.返回的值 2.这个布尔值,如果只存在就返回ture没有就false
i, ok := map1[1]
fmt.Println(i, ok)
if !ok {
fmt.Println("这个值不存在")
} else {
fmt.Println(i)
}
//map的遍历
for k, v := range map1 {
fmt.Println(k, v)
}
//只需要遍历出key
for k := range map1 {
fmt.Println(k)
}
//主需要遍历value
for _, v := range map1 {
fmt.Println(v)
}
注意:遍历map的顺序和添加时键值对的顺序无关
delete函数删除键值对
package main
import "fmt"
func main() {
map1 := map[int]int{
1: 1,
2: 2,
3: 3,
}
//使用delete函数删除键值对,参数一被操作的目标map,参数二要删除的键值对的key
delete(map1, 1)
fmt.Println(map1)
}
按照指定顺序遍历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
}
slice := make([]string, 0, 200)
for k := range scoreMap {
slice = append(slice, k)
}
//对切片进行排序
sort.Strings(slice)
//这里range遍历的是切片,有两个返回值,所以要用_站位
for _, key := range slice {
fmt.Printf("%v--%v\n", key, scoreMap[key])
}
}
元素为map类型的切片
package main
import "fmt"
func main() {
// 初始化切片
slice := make([]map[int]int, 3)
// 初始化切片中的map
slice[0] = make(map[int]int, 1)
slice[0][1] = 1
fmt.Println(slice)
// slice中的每一个map都需要初始化
slice[1] = make(map[int]int, 1)
slice[1][2] = 2
fmt.Println(slice)
}
元素为切片类型的map
package main
import "fmt"
func main() {
// 初始化map
map1 := make(map[int][]int, 10)
// 初始化并赋值切片
map1[1] = []int{1, 2}
map1[2] = []int{1, 2}
map1[3] = []int{1, 2}
fmt.Println(map1)
}