💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 1.map 语法: ~~~ make(map[KeyType]ValueType, [cap]) ~~~ KeyType:表示键的类型 ValueType:表示键对应的值的类型 cap:表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量 --- map 的零值是`nil`。如果你想添加元素到 nil map 中,会触发运行时 panic。因此 map 必须使用`make`函数初始化 ~~~ personSalary = make(map[string]int) // 赋值 personSalary := make(map[string]int) // 简洁写法 personSalary["steve"] = 12000 // 添加元素 personSalary["jamie"] = 15000 personSalary["mike"] = 9000 m1 := map[int]string{1: "one", 2: "tow", 3: "three"} // map申明及初始化 personSalary["mike"] = 9000 // 获取元素 delete(personSalary, "steve") // 删除元素 value, ok := map[key] //获取 map 中某个 key 是否存在的语法。如果`ok`是 true,表示 key 存在,key 对应的值就是`value`,反之表示 key 不存在 // 遍历 for key, value := range personSalary { fmt.Printf("personSalary[%s] = %d\n", key, value) } ~~~ ### 1.1按照指定顺序遍历map ~~~ 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 } //取出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]) } } ~~~ ### 1.2. 元素为map类型的切片 下面的代码演示了切片中的元素为map类型时的操作: ~~~ func main() { var mapSlice = make([]map[string]string, 3) for index, value := range mapSlice { fmt.Printf("index:%d value:%v\n", index, value) } fmt.Println("after init") // 对切片中的map元素进行初始化 mapSlice[0] = make(map[string]string, 10) mapSlice[0]["name"] = "王五" mapSlice[0]["password"] = "123456" mapSlice[0]["address"] = "红旗大街" for index, value := range mapSlice { fmt.Printf("index:%d value:%v\n", index, value) } } ~~~ ### 1.3. 值为切片类型的map 下面的代码演示了map中值为切片类型的操作: ~~~ func main() { var sliceMap = make(map[string][]string, 3) fmt.Println(sliceMap) fmt.Println("after init") key := "中国" value, ok := sliceMap[key] if !ok { value = make([]string, 0, 2) } value = append(value, "北京", "上海") sliceMap[key] = value fmt.Println(sliceMap) } ~~~ ***** 【知识点】 * map 也是引用类型。当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量 * map 之间不能使用`==`操作符判断,`==`只能用来检查 map 是否为`nil` * map中当访问的key不存在时会返回默认的零值