GO学习笔记(4)
四. Map
4.1. 定义
func mapDefine() { // map是map是一种无序的基于key-value的数据结构, Go语言中的map是引用类型, 必须初始化才能使用 // 基本定义格式: map[KeyType]ValueType var m map[int]int fmt.Println(m) // m[1] = 100 // 因为没有为其分配内存,所以对其操作会报错: panic: assignment to entry in nil map // 使用make()为其分配内存 m = make(map[int]int, 5) fmt.Println(m) m[1] = 100 fmt.Println(m) // map[1:100] // 可以在声明的时候就为其初始化, 这样就为其分配了内存 m1 := map[int]string{ 1: "GO", 2: "C++", } fmt.Println(m1) // map[1:GO 2:C++] m1[3]="nodejs" fmt.Println(m1) // map[1:GO 2:C++ 3:nodejs] }
4.2. map简单操作
func eachMap() { m1 := map[int]string{ 1: "GO", 2: "C++", 3: "java", 4: "python", } // 添加 m1[10] = "C" // 删除 delete(m1,1) // 判断是否存在 v, ok := m1[2] if ok { fmt.Println(v) } // 遍历 for k, v := range m1 { fmt.Println(k, v) } }
4.3. 根据key排序
func sortMap() { 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 } //取出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]) } }
4.4. slice 和 map
func sliceOrMap() { // 值为slice的map m := make(map[int][]int, 3) m[1] = []int{1, 2, 3} m[2] = []int{5, 6, 7} fmt.Println(m) // map[1:[1 2 3] 2:[5 6 7]] // 元素为map的slice s := make([]map[int]string, 5) fmt.Println(s) // [map[] map[] map[] map[] map[]] //s[0][0] = "qqq" // panic: assignment to entry in nil map 必须先分配内存 s[0] = make(map[int]string, 3) s[0][111] = "slice" s[0][222] = "map" s[0][333] = "array" fmt.Println(s) // [map[111:slice 222:map 333:array] map[] map[] map[] map[]] }