map是引用类型
创建、初始化
//1、make创建map类型的数据
var userinfo1 = make(map[string]string) // make(map[string]string 20) 指定长度
userinfo1["username"] = "张三"
userinfo1["age"] = "20"
userinfo1["sex"] = "男"
fmt.Println(userinfo1) // map[age:20 sex:男 username:张三]
fmt.Println(userinfo1["username"]) // 张三
//2、声明时填充元素
var userinfo2 = map[string]string{
"username": "张三",
"age": "20",
"sex": "男",
}
fmt.Println(userinfo2) // map[age:20 sex:男 username:张三]
//3、类型推导方式
userinfo3 := map[string]string{
"username": "张三",
"age": "20",
"sex": "男",
}
fmt.Println(userinfo3)
for range 循环遍历map类型数据
for k, v := range userinfo3 {
fmt.Printf("key:%v value:%v\n", k, v)
}
/*
key:username value:张三
key:age value:20
key:sex value:男
*/
map类型的CURD
//查找
v, ok := userinfo3["age"]
fmt.Println(v, ok) // 20 true
//删除
delete(userinfo3, "sex")
fmt.Println(userinfo3) // map[age:20 username:张三]
//增加
userinfo3["height"] = "180cm"
定义一个map类型的切片
var userinfo = make([]map[string]string, 3, 3) // 长度 容量
fmt.Println(userinfo[0] == nil) // true
if userinfo[0] == nil {
userinfo[0] = make(map[string]string)
userinfo[0]["username"] = "张三"
userinfo[0]["age"] = "男"
}
if userinfo[1] == nil {
userinfo[1] = make(map[string]string)
userinfo[1]["username"] = "李四"
userinfo[1]["age"] = "男"
}
fmt.Println(userinfo) // [map[age:男 username:张三] map[age:男 username:李四] map[]]
//拿到里面的元素
for _, v := range userinfo {
//fmt.Println(v)
for k2, v2 := range v {
fmt.Println(k2, v2)
}
}
/*
username 张三
age 男
username 李四
age 男
*/
如果想在map对象中存放一系列属性,可以将map类型的值定义成切片
var userinfo = make(map[string][]string)
userinfo["hobby"] = []string{
"吃饭",
"睡觉",
}
userinfo["word"] = []string{
"java",
"C++",
}
fmt.Println(userinfo) // map[hobby:[吃饭 睡觉] word:[java C++]]
map的排序
map1 := make(map[int]int, 10)
map1[1] = 50
map1[8] = 1
map1[3] = 56
map1[7] = 77
map1[2] = 78
map1[1] = 1
//无序
for key, val := range map1 {
fmt.Println(key, val)
}
//按照key升序输出
//1.把map的key放在切片里面
var keySlice []int
for key, _ := range map1 {
keySlice = append(keySlice, key)
}
fmt.Println(keySlice) //[7 2 1 3 8]
//2.让key进行升序排序
sort.Ints(keySlice) //[1 2 3 7 8]
fmt.Println(keySlice)
//3.循环遍历key输出map的值
for _, v := range keySlice {
fmt.Printf("key=%v value=%v\n", v, map1[v])
}
/*
8 1
3 56
1 1
7 77
2 78
[7 2 1 3 8]
[1 2 3 7 8]
key=1 value=1
key=2 value=78
key=3 value=56
key=7 value=77
key=8 value=1
*/
统计单词出现个数
var str = "how do you do"
var strSlice = strings.Split(str, " ")
fmt.Println(strSlice) // [how do you do]
var strMap = make(map[string]int)
for _, v := range strSlice {
strMap[v]++
}
fmt.Println(strMap) // map[do:2 how:1 you:1]
网友评论