该文章Github地址:https://github.com/AntonyCheng/go-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】
在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!
上一章:由浅到深认识Go语言(7):数组
10.map
数组和切片的思考
当我们想要查询一个元素是,我们需要知道索引才能找到我们想要找的元素,这样就显得很麻烦,因为我们并不能每次找一个元素都需要把索引熟悉一边,所以引入了键值对的概念;
10.1.map概念
map是一种无序的键值对的集合,map最重要的一点就是通过key来快速检索数据,key就类似于索引,指向数据的值,所以键具有唯一性;
10.2.map创建与初始化
map创建:创建和声明不一样,创建是指声明并且初始化为空,map类型第一步一定是创建;
//map创建有以下三种方式
//1.var map名 map[键的类型]值的类型 = map[键的类型]值的类型{}
//2.map名 := map[键的类型]值的类型{}
//3.map名 := make(map[键的类型]值的类型,map容量) map容量一般不设置
package main
import "fmt"
func main() {
var mapName1 map[int]string = map[int]string{}
fmt.Println("mapName1 =", mapName1)
mapName2 := map[int]string{}
fmt.Println("mapName2 =", mapName2)
mapName3 := make(map[int]string)
fmt.Println("mapName3 =", mapName3)
}
打印效果如下:
map初始化:
package main
import "fmt"
func main() {
var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
fmt.Println("mapName1 =", mapName1)
mapName2 := map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
fmt.Println("mapName2 =", mapName2)
mapName3 := make(map[int]string)
mapName3[1] = "张三"
mapName3[2] = "李四"
mapName3[3] = "王五"
mapName3[4] = "Antony"
fmt.Println("mapName3 =", mapName3)
}
打印效果如下:
10.3.键值操作
通过Key获取值
基本格式:
map名[键]
示例如下:
package main
import "fmt"
func main() {
var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
fmt.Println(mapName1[1])
}
通过Key获取值时,判断其是否存在
基本格式:
变量1,变量2 := map名[键]
//如果该键所对应的值存在,那么变量1中存储对应值,并且变量2的值变为true;
//如果该键所对应的值不存在,那么变量1中存储为空,并且变量2的值变为false;
示例如下:
package main
import "fmt"
func main() {
var mapName1 map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
var v1, b1 = mapName1[1]
var v2, b2 = mapName1[100]
fmt.Printf("mapName[1] ==> %s : %t\n", v1, b1)
fmt.Printf("mapName[2] ==> %s : %t\n", v2, b2)
}
打印效果如下:
通过循环方式获取值
package main
import "fmt"
func main() {
var mapName map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
for k, v := range mapName {
fmt.Printf("%d: %s\n", k, v)
}
}
打印效果如下:
通过Key删除某个值
package main
import "fmt"
func main() {
var mapName map[int]string = map[int]string{1: "张三", 2: "李四", 3: "王五", 4: "Antony"}
delete(mapName, 1)
delete(mapName, 3)
for k, v := range mapName {
fmt.Println(k, ":", v)
}
}
打印效果如下:
10.4.map作为函数参数
Go语言中map作为函数参数,内容被修改后,会影响原map的内容;
package main
import (
"fmt"
)
func main() {
key := 0
fmt.Println("请输入你要验证的key值:")
fmt.Scan(&key)
m := map[int]string{1: "张三", 2: "李四"}
exists, result := checkExists(m, key)
fmt.Println(exists, ":", result)
}
func checkExists(m map[int]string, key int) (bool, string) {
var v, b = m[key]
if b {
return b, v
} else {
return b, "null"
}
}
打印效果如下:
10.5.map案例
案例一:
有一个英文字符串,统计每个字母出现的次数;
package main
import "fmt"
func main() {
str := ""
fmt.Println("请输入英文字符串:")
fmt.Scan(&str)
m := map[byte]int{}
for _, v := range str {
var _, b = m[byte(v)]
if b {
m[byte(v)] = m[byte(v)] + 1
} else {
m[byte(v)] = 1
}
}
for k, v := range m {
fmt.Printf("%c : %d\n", k, v)
}
}
打印效果如下:
标签:map,语言,int,fmt,var,Go,main,string From: https://blog.csdn.net/AntonyCheng/article/details/137327814