package main import ( "fmt" "sort" ) func main() { // 创建map变量(方式一),格式:map[keyType]valueType,其中keyType为key的数据类型,valueType为value的数据类型 var profile = make(map[string]string) // 等价于:var profile map[string]string = make(map[string]string) profile["name"] = "张三" profile["age"] = "18" profile["gender"] = "男" // 创建map变量(方式二) // var profile = map[string]string{ // "name": "张三", // "age": "18", // "gender": "男", // } // 创建map变量(方式三) // var profile = map[string]string{} // profile["name"] = "张三" // profile["age"] = "18" // profile["gender"] = "男" fmt.Println("profile =", profile) // profile = map[age:18 gender:男 name:张三] // 遍历map(重要提醒:map是无序的,每次执行程序操作输出的三个属性的先后顺序可能是不同的) for key, value := range profile { fmt.Printf("%v => %v \n", key, value) } // gender => 男 // name => 张三 // age => 18 // 根据key值排序然后遍历map(重要提醒:Go只提供了value值排序函数,故只能提取出所有key然后对其排序再遍历所有key变相实现按key值排序) keys := make([]string, 0) for key := range profile { keys = append(keys, key) } fmt.Println("排序前的keys =", keys) // 排序前的keys = [name age gender] sort.Strings(keys) fmt.Println("排序后的keys =", keys) // 排序后的keys = [age gender name] for _, key := range keys { fmt.Printf("%v => %v \n", key, profile[key]) } // age => 18 // gender => 男 // name => 张三 // 检查key是否存在(测试不存在的情况) value, exist := profile["job"] if exist { fmt.Println("job存在,其值为:", value) } else { fmt.Println("job不存在") // job不存在 } // 检查key是否存在(测试存在的情况) value, exist = profile["name"] if exist { fmt.Println("name存在,其值为:", value) // name存在,其值为: 张三 } else { fmt.Println("name不存在") } // 删除key(重要提醒:若key不存在并不会报错) delete(profile, "gender") fmt.Println("profile =", profile) // profile = map[age:18 name:张三] } // ========== 总结 ========== // // 1、map就是一张key=value哈希表,所以在一个map里面key是唯一的。值得一提的是key的数据类型不仅可以是int、string,还可以 // 是bool、指针,甚至是接口、结构体、数组,但不能是slice、map、function。 // 2、map是无序的,它不会根据key值来排序,也不会根据key插入或修改时间来排序(注:使用Print打印map时会根据key升序,但map本 // 身仍然是无序的)。
package main import "fmt" func main() { // 如果value值的数据类型不确定可以设为any,这里的any类似Java里的Object profile1 := make(map[string]any) profile1["name"] = "张三" profile1["age"] = 18 profile1["gender"] = "男" profile1["weight"] = 66.5 fmt.Println("profile1 =", profile1) // profile1 = map[age:18 gender:男 name:张三 weight:66.5] // 如果key和value的数据类型都不确定可以都设为any profile2 := map[any]any{ "name": "李四", "age": 17, "gender": "女", "weight": 52.8, } fmt.Println("profile2 =", profile2) // profile2 = map[age:17 gender:女 name:李四 weight:52.8] }
package main import "fmt" func main() { // 只声明且没有赋值的map变量值为nil,或者是map变量的零值为nil var map1 map[string]any if map1 == nil { fmt.Println("map1 == nil") // map1 == nil } else { fmt.Println("map1 != nil") } // 被赋值的map变量值不为nil,即使是空map var map2 = map[string]any{} if map2 == nil { fmt.Println("map2 == nil") } else { fmt.Println("map2 != nil") // map2 != nil } // 重置map变量为nil map2 = nil if map2 == nil { fmt.Println("map2 == nil") // map2 == nil } else { fmt.Println("map2 != nil") } }
Copyright © 2024 码农人生. All Rights Reserved