GO基础5-map

2020-12-06  本文已影响0人  一直吃不饱

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]
上一篇 下一篇

猜你喜欢

热点阅读