Golang - map

    xiaoxiao2022-07-12  150

    文章目录

    定义用法创建嵌套 map无序遍历有序遍历删除 判断key是否存在


    定义

    k - v 的映射关系无序引用类型

    用法

    创建

    // 声明 var a map[string]int // 只声明, 未初始化, 未赋值, map为nil, 不可操作 // 初始化 a = make(map[string]int, 8) // 容量为8, 不为nil, 为空map, 即map[] // 赋值 a["Tim"] = 100 a["Tom"] = 99 // 简短声明 b := make(map[string]int, 8) // 这里只有一个参数, 与切片要区分 // 声明, 初始化, 并赋值 gender := map[string]int{ "Tim": 0, "Lily": 1, }

    嵌套 map

    package main func main() { // 需要依次初始化 a := make(map[string]map[string]int, 2) // 这是外层初始化 a["语文"] = make(map[string]int, 2) // 这是内层初始化 a["语文"]["上"] = 100 a["语文"]["下"] = 99 a["数学"] = make(map[string]int, 2) // 这是内层初始化 a["数学"]["上"] = 100 a["数学"]["下"] = 100 // 循环遍历外层 map for _, v := range a { fmt.Println(v) } }

    无序遍历

    package main import ( "fmt" "math/rand" ) func main() { a := make(map[string]int, 5) // 制造一个学号和成绩的对应关系 for i := 0; i < 5; i++ { k := fmt.Sprintf("stud", i) // 利用 Sprintf 制造学号 v := rand.Intn(100) // 随机一个数字作为成绩 a[k] = v } // 默认为无序遍历 for k,v := range a { fmt.Println(k, v) } }

    有序遍历

    package main import ( "fmt" "math/rand" "sort" ) func main() { a := make(map[string]int, 5) // 制造一个学号和数字的对应关系 for i := 0; i < 5; i++ { k := fmt.Sprintf("stud", i) // 利用 Sprintf 制造学号 v := rand.Intn(100) // 随机一个数字作为成绩 a[k] = v } // 有序遍历: 先将 k 取出, 放入切片先排序, 再按照排序后的切片顺序取出 v // 创建一个切片用于存放 k keys := make([]string, 0, 5) // 这里长度若不为 0,则会补零值(本例中为" "), 并非我们要的效果 // map 支持只遍历 k for k := range a { keys = append(keys, k) // 将 k 依次拿出放入切片 } // 把切片中的元素排序 sort.Strings(keys) // 最后输出结果 for _, v := range keys { fmt.Println(v, a[v]) } }

    删除

    package main import "fmt" func main() { a := make(map[string]int, 2) a["Tom"] = 100 a["Tim"] = 80 fmt.Println(a) // map[Tim:80 Tom:100] _, ok := a["Tom"] if ok { // 使用delete(mapName, key), 删除键值对 delete(a, "Tom") } fmt.Println(a) // map[Tim:80] }

    判断key是否存在

    package main import "fmt" func main() { a := map[string]int{ "语文": 100, "数学": 99, } // v, ok := map[key], 重点掌握 v, ok := a["语文"] // 若 ok 为真, v 为对应的值; 若 ok 为假, 则 v 为空值(int 为 0, []int 为 []) if ok { fmt.Println(v) } else { fmt.Println("不存在") } }
    最新回复(0)