随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

go map

前言:

map类型是一个hash表,由键和值组成

正文:

map声明格式:

var mapname map[keytype] valuetype

mapname map的变量名

keytype 为键类型

valuetype 是键对应的值类型

未初始化的map的值是nil

map创建实例:

方式1users := map[int]string{1: "lampol", 2: "liudehua"}

方式2:先声明,再赋值

var users map[int]string        //定义一个空的map

users = make(map[int]string, 4)  //map分配空间

users[1] = "lampol1"            //map赋值

users[2] = "lampol2"            //map赋值

 

map的增删查改:

增加值:users[1] = "lampol1"

修改值 users[1] = "liming"

删除值  delete(users, 1)

查找值  name,exist :=users[1]  #exist true表示存在,为false表示不存在

 

map遍历:

由于map里面的键是没有顺序的,所以输出是无序的

map无序的输出

for k, v := range users {

fmt.Println(k, v) //遍历出来是没有顺序的

}

map顺序输出:由于map是无序的,所以需要对键先排序,然后按键的顺序输出值

keys := make([]int, 0, len(users))  //生成一个int类型的切片

for k, _ := range users {

keys = append(keys, k)

}

sort.Ints(keys)   //正序排序

fmt.Println(keys) //输出 [1 2 3 4 5]

 

for _, key := range keys {

fmt.Println(key, users[key])  //顺序排列

}

map类型切片:

示例1:生成map类型的切片

users := make([]map[string]string, 2) //生成一个map的切片

users[0] = make(map[string]string, 3) //初始化切片

users[0]["name"] = "lampol"

users[0]["age"] = "20"

users[0]["email"] = "13423@qq.com"

users[1] = make(map[string]string, 3) //初始化切片

users[1]["name"] = "liudehua"

users[1]["age"] = "48"

users[1]["email"] = "2342@qq.com"

 

示例2:值为切片类型的map

省市级联map

citys := make(map[string][]string, 2) //声明map 值为切片

sCitys := make([]string, 0, 3)  //定义空切片  长度为0 容量是3

sCitys = append(sCitys, "青岛", "济南", "烟台") //切片赋值

citys["山东"] = sCitys

 

jCitys := make([]string, 0, 3)  //定义空切片  长度为0 容量是3

jCitys = append(jCitys, "南京", "苏州", "常州") //切片赋值

citys["江苏"] = jCitys

 

fmt.Println(citys) //输出 map[山东:[青岛 济南 烟台] 江苏:[南京 苏州 常州]]

//循环遍历

for k, v := range citys {

for _, v2 := range v {

fmt.Println(k, v2)

}

}

 

完结

 

posted @ 2023-03-31 23:03  yangphp  阅读(13)  评论(0编辑  收藏  举报