写点什么

Go- map 的使用

用户头像
HelloBug
关注
发布于: 1 小时前
Go- map的使用

Go 学习笔记,学习内容《Go入门指南》


主要介绍以下内容:

  • 判断键值对是否存在

  • 删除键值对

  • 使用 for range 遍历

  • map 类型的切片

  • map 排序

  • map 键值对调


代码示例可以直接运行

package main
import ( "fmt" "sort")
func printDivider(str ...string) { fmt.Println() fmt.Println("-----------------------------------------------") if len(str) > 0 { fmt.Println(str) }}
func main() { /* 判断键值对是否存在 */ printDivider("判断键值对是否存在") m1 := map[string]int{"a": 1, "b": 2, "c": 3} v, ok := m1["a"] // 如果取值存在,则返回对应的值,和true fmt.Printf("m1[\"a\"] = %d, %t\n", v, ok) // 输出:m1["a"] = 1, true
v, ok = m1["w"] // 如果取值不存在,则返回对应类型的零值,和false fmt.Printf("m1[\"w\"] = %d, %t\n", v, ok) // 输出:m1["w"] = 0, false
/* 删除键值对 */ printDivider("删除键值对") fmt.Println(m1) // 输出:map[a:1 b:2 c:3] delete(m1, "a") fmt.Println(m1) // 输出:map[b:2 c:3] delete(m1, "w") // 如果key不存在,不会产生错误 fmt.Println(m1) // 输出:map[b:2 c:3]
/* 使用for range遍历 */ printDivider("使用for range遍历") for k, v := range m1 { fmt.Printf("%s-%d ", k, v) // 输出:b-2 c-3 } fmt.Println()
/* map类型的切片 切片是一个数组,切片的下标是整型,切片的元素是map */ printDivider("map类型的切片") s1 := make([]map[int]int, 5) // 初始化一个切片,元素类型为map[int][int],长度为5 fmt.Printf("len(s1) = %d, cap(s1) = %d\n", len(s1), cap(s1)) // 输出:len(s1) = 5, cap(s1) = 5 /* 正确的赋值方式 */ for i := range s1 { s1[i] = make(map[int]int, 1) s1[i][1] = 0 } fmt.Println(s1) // 输出:[map[1:0] map[1:0] map[1:0] map[1:0] map[1:0]]
s2 := make([]map[int]int, 5) /* 错误的赋值方式,因为s只是切片中的元素的一个拷贝,对s进行赋值,并不会影响切片中的值 */ for _, s := range s2 { s = make(map[int]int, 1) s[1] = 0 } fmt.Println(s2) // 输出:[map[] map[] map[] map[] map[]]
/* map排序 1、首先将map的key保存在切片中 2、对切片进行排序 3、根据排序后的切片遍历map */ printDivider("map排序") map1 := map[string]int{"w": 1, "b": 9, "a": 2, "m": 4, "n": 88} keys := make([]string, len(map1)) i := 0 for k, _ := range map1 { keys[i] = k i++ } sort.Strings(keys)
for _, k := range keys { fmt.Printf("%s:%d ", k, map1[k]) // 输出:a:2 b:9 m:4 n:88 w:1 } fmt.Println()
/* map键值对调 成功对调的前提是value值可以作为key,并且value不重复 */ printDivider("map键值对调") fmt.Println(map1) // 输出:map[a:2 b:9 m:4 n:88 w:1] map2 := make(map[int]string, len(map1)) for k, v := range map1 { map2[v] = k } fmt.Println(map2) // 输出:map[1:w 2:a 4:m 9:b 88:n]}
复制代码


发布于: 1 小时前阅读数: 3
用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- map的使用