ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# GOLang type 复合类型map ### Author 品茶 > go中的map就是一个key:value的hash,与python中的字典一样。 1. 支持增册改查 2. 支持嵌套,包括其它类型 3. 可以使用map 和make来创建字典,map需要初始化,而make定义的时候就需要初始化 4. 两个相同的map是不支持比较的,go强类型语言 5. make创建的map未赋值之前是零值nil,具体得看value 6. 可以间接实现set ~~~ func main() { //mape and init a map ages := map[string]string{ "name": "zwhset", "age": "17", } //use make age2 := make(map[string]int) age2["nice"] = 1 age2["good"] = 2 fmt.Println(ages["name"], ages["age"]) fmt.Println(age2["nice"], age2["good"]) // if key not found return zero value //常用于结构定义 a := make(map[string]string) a["name"] = "zwhset" a["passwd"] = "goodjob" //这种用于初始化比较多 b := map[string]string{ "name": "zwhset", "passwd": "goodjob", } } ~~~ ~~~ func main() { // 增 册 改 查 // 增 改 -> x[key] = value // 册 -> delete(x,key) // 查 -> x[kye] // 测试是否有key,可以用ok button方法 age, ok := ages["bob"] // 初始化为零值 // var x make(map[string]string) == nil //mape and init a map ages := map[string]string{ "name": "zwhset", "age": "17", } // 下标访问 fmt.Println(ages["name"]) // 删除元素 delete(ages, "name") // 元素不存在时检索会返回对应零值,这里的值是string -> "" int -> 0 // 不能对元素取址操作,因为随着元素增长,内存空间会重新分配所以取址可能无效 // 遍历全部元素,注意他是无序的 for key, value := range ages { fmt.Println(key, value) } // 如果想要有序的话,需要中转一下 var names []string //names := make([]string, 0, len(ages)) // slice 这种方式更效率 for name, _ := range ages { names = append(names, name) // use names = action } sort.Strings(names) // sort names for _, name := range names { // only name fmt.Println(name, ages[name]) // name , ages[name] } //age, ok := ages["age1"] //if !ok { // fmt.Println("age not in ages") //} //fmt.Println(age) // 更好的一种方式 if _, ok := ages["age1"]; !ok { fmt.Println("age not in ages") } // map是不能比较的,如果要比较两个map是否有相同的KEY和 value使用 equal方法 // go中并没有set的方法,但可以用map方法间接实现, map[string]bool map [type]bool } ~~~