网站后台管理模板html,阿里云重新备案注销主体还是注销网站,全国软件开发公司排名前一百,网站改版后不收录映射#xff08;map#xff09;是一种特殊的数据结构#xff0c;用于存储一系列无序的键值对#xff0c;映射基于键来存储数据。映射功能强大的地方是#xff0c;能够基于键快速检索数据。键就像索引一样#xff0c;指向与该键关联的值。与C、Java中的映射的不同之处在于…映射map是一种特殊的数据结构用于存储一系列无序的键值对映射基于键来存储数据。映射功能强大的地方是能够基于键快速检索数据。键就像索引一样指向与该键关联的值。与C、Java中的映射的不同之处在于Go语言使用映射不需要引入任何库而C、Java需要先引用相应的库因此Go语言的映射使用起来更加方便。
1、映射的创建
语法格式var mapname map[keytype]valuetype
mapname为map的变量名。keytype为键类型。valuetype为键对应的值类型
注意[keytype]和valuetype之间允许有空格。
在声明映射时不需要知道map的长度因为map是可以动态增长的未初始化的map的值是nil使用函数len()可以获取map中键值对的数目。
在Go语言中最常用的创建并初始化映射的方法有两种
使用内置的make()函数创建映射。使用字面量创建映射。
// make() 创建一个映射,键的类型是string,值的类型是int
dict : make(map[string]int)// 字面量创建一个映射,键和值的类型都是string使用两个键值对初始化映射
dict : map[string]string{ red: #da1337,orange: #e95a22}
使用映射字面量是更常用的方法映射的初始长度会根据初始化时指定的键值对的数量来确定。映射的键可以是任何值这个值的类型并不限制内置的类型或者结构类型都可以不过需要确定这个值可以使用“”运算符做比较。需要注意的是切片、函数及包含切片的结构类型由于具有引用语义均不能作为映射的键使用这些类型会造成编译错误 可以使用切片作为映射的值
// 创建一个映射,使用字符串切片作为值
dict : map[int][]string {}
2、映射的遍历
map的遍历过程可以通过使用for range循环来完成
func main() {scene : make(map[string]int)scene[route] 66scene[brazil] 4scene[china] 1for k, v : range scene {fmt.Println(k, v)}// 只遍历值for _, v : range scene {fmt.Println(v)} // 只遍历键for k : range scene {fmt.Println(k)}
}
只遍历值将不需要的键修改为匿名变量的形式即可。只遍历键无须将值修改为匿名变量的形式。 需要特定顺序的遍历结果正确的做法是先排序
func main() {scene : make(map[string]int)scene[route] 66scene[brazil] 4scene[china] 1var sceneList []stringfor k : range scene {sceneList append(sceneList, k)}// 对切片进行排序sort.Strings(sceneList)// 输出fmt.Print(sceneList) // [brazil china route]
}
3、映射的删除
Go语言中并没有为map提供任何清空所有元素的函数、方法清空map的唯一办法就是重新使用make()函数构建一个新的map不用担心垃圾回收的效率这是因为Go语言中的并行垃圾回收效率比写一个清空函数要高效得多。
使用delete()内置函数从map中删除一组键值对delete()函数的语法格式如下delete(map, 键)
func main() {scene : make(map[string]int)scene[route] 66scene[brazil] 4scene[china] 1delete(scene, brazil)for k, v : range scene {fmt.Println(k, v)}
}
4、映射的特性
1map的单个键值访问格式为mapName[key]更新某个key的值时mapName[key]放到等号左边访问某个key的值时mapName[key]放在等号右边。
2可以使用range遍历一个map类型变量但是不保证每次迭代元素的顺序。
3删除map中的某个键值语法如下delete(mapName,key) delete是内置函数用来删除map中的某个键值对。
4可以使用内置的len()函数返回map中的键值对数量。
5Go内置的map不是并发安全的并发安全的map可以使用标准包sync中的map。
6不能直接修改map value内某个元素的值如果想修改map的某个键值则必须整体赋值。