一、map 详解
make
创建 map 类型的数据:
package main import ( "fmt" ) func main() { var userinfo = map[string]string{ "username": "张三", "age": "20", "sex": "男", //这也要写, } fmt.Println(userinfo) }
输出:
map[age:20 sex:男 username:张三]
for range
循环遍历 map 类型的数据。
map 类型数据的 curd
package main import ( "fmt" ) func main() { // 创建 map 类型的数据 var userinfo = make(map[string]string) userinfo["username"] = "张三" userinfo["age"] = "20" fmt.Println(userinfo) // 修改 map 类型的数据 userinfo["username"] = "李四" fmt.Println(userinfo) // 查找 map 类型的数据 v, ok := userinfo["age"] fmt.Println(v, ok) // 删除 map 类型的数据 delete(userinfo, "age") fmt.Println(userinfo) }
输出:
map[age:20 username:张三] map[age:20 username:李四] 20 true map[username:李四]
map 和切片结合
package main import ( "fmt" ) func main() { var userinfo = make(map[string][]string) // 切片 []string 是一个整体 userinfo["hobby"] = []string{ "吃饭", "睡觉", "敲代码", } userinfo["work"] = []string{ "php", "golang", "python", } for k, v := range userinfo { fmt.Println(k, v) for _, value := range v { fmt.Println(value) } } }
输出:
hobby [吃饭 睡觉 敲代码] 吃饭 睡觉 敲代码 work [php golang python] php golang python
map 类型也是引用数据类型,改变变量副本值会影响变量本身的值。
二、map 的排序
package main import ( "fmt" "sort" ) func main() { map1 := make(map[int]int, 10) map1[10] = 100 map1[1] = 13 map1[4] = 56 map1[8] = 90 for key, val := range map1 { fmt.Println(key, val) } //按照 key 升序输出 map 的 key=>value //1、把 map 的 key 放在切片里面 var keySlice []int for key, _ := range map1 { keySlice = append(keySlice, key) } fmt.Println(keySlice) //2、让 key 升序排序 sort.Ints(keySlice) fmt.Println(keySlice) //3、循环遍历 key 输出 map 的值 for _, v := range keySlice { fmt.Printf("key=%v value=%v\n", v, map1[v]) } }
输出:
4 56 10 100 1 13 8 90 [4 10 1 8] [1 4 8 10] key=1 value=13 key=4 value=56 key=8 value=90 key=10 value=100
map 实例:计数统计
package main import ( "fmt" "strings" ) func main() { var str = "how do you do" var strSlice = strings.Split(str, " ") fmt.Println(strSlice) var strMap = make(map[string]int) for _, v := range strSlice { strMap[v]++ } fmt.Println(strMap) }
输出:
[how do you do] map[do:2 how:1 you:1]