Go Maps
2023/9/11 23:23:05
本文主要是介绍Go Maps,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Maps用于以键值对的形式存储数据值。Maps中的每个元素都是一个键值对。Maps是一个无序且可更改的集合,不允许重复。Maps的长度是其元素的数量。您可以使用 len() 函数来查找长度。Maps的默认值是 nil。Maps保存对底层哈希表的引用。
Go语言有多种方法来创建Maps。
使用 var 和 := 语法创建Maps
var a = map[KeyType]ValueType{key1:value1, key2:value2,...} b := map[KeyType]ValueType{key1:value1, key2:value2,...}
示例
以下示例展示了如何在Go中创建Maps。请注意代码中和输出中的顺序。
package main import ("fmt") func main() { var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"} b := map[string]int{"Oslo": 1, "Bergen": 2, "Trondheim": 3, "Stavanger": 4} fmt.Printf("a\t%v\n", a) fmt.Printf("b\t%v\n", b) }
结果:
a map[brand:Ford model:Mustang year:1964] b map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]
注意:代码中定义的Maps元素的顺序与它们存储的方式不同。数据以一种能够从Maps中高效检索数据的方式存储。
使用 make() 函数创建Maps
var a = make(map[KeyType]ValueType) b := make(map[KeyType]ValueType)
示例
以下示例展示了如何使用 make() 函数在Go中创建Maps。
package main import ("fmt") func main() { var a = make(map[string]string) // Maps 现在为空 a["brand"] = "Ford" a["model"] = "Mustang" a["year"] = "1964" // a 不再为空 b := make(map[string]int) b["Oslo"] = 1 b["Bergen"] = 2 b["Trondheim"] = 3 b["Stavanger"] = 4 fmt.Printf("a\t%v\n", a) fmt.Printf("b\t%v\n", b) }
结果:
a map[brand:Ford model:Mustang year:1964] b map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]
创建一个空Maps
创建空Maps有两种方式。一种是使用 make() 函数,另一种是使用以下语法。
var a map[KeyType]ValueType
注意:使用 make() 函数是创建空Maps的正确方式。如果以不同的方式创建空Maps并写入它,将会引发运行时错误。
示例
以下示例演示了使用 make() 函数和不使用 make() 函数声明空Maps的区别。
package main import ("fmt") func main() { var a = make(map[string]string) var b map[string]string fmt.Println(a == nil) fmt.Println(b == nil) }
结果:
false true
允许的键类型
Maps键可以是任何定义了等号运算符(==)的数据类型,包括:
- 布尔值
- 数字
- 字符串
- 数组
- 指针
- 结构体
- 接口(只要动态类型支持等号运算)
不允许的键类型包括:
- 切片
- Maps
- 函数
这些类型是不允许的,因为它们不支持等号运算(==)。
允许的值类型
Maps的值可以是任何类型。
访问Maps元素
您可以通过以下方式访问Maps元素:
value = map_name[key]
示例
以下示例演示了如何访问Maps元素。
package main import ("fmt") func main() { var a = make(map[string]string) a["brand"] = "Ford" a["model"] = "Mustang" a["year"] = "1964" fmt.Printf(a["brand"]) }
结果:
Ford
更新和添加Maps元素
要更新或添加元素,可以使用以下方式:
map_name[key] = value
示例
以下示例演示了如何更新和添加元素到Maps中。
package main import ("fmt") func main() { var a = make(map[string]string) a["brand"] = "Ford" a["model"] = "Mustang" a["year"] = "1964" fmt.Println(a) a["year"] = "1970" // 更新元素 a["color"] = "red" // 添加元素 fmt.Println(a) }
结果:
map[brand:Ford model:Mustang year:1964] map[brand:Ford color:red model:Mustang year:1970]
从Maps中删除元素删除元素使用delete()
函数。
语法
delete(map_name, key)
示例
package main import ("fmt") func main() { var a = make(map[string]string) a["brand"] = "Ford" a["model"] = "Mustang" a["year"] = "1964" fmt.Println(a) delete(a, "year") fmt.Println(a) }
结果
map[brand:Ford model:Mustang year:1964] map[brand:Ford model:Mustang]
检查Maps中特定元素的存在 您可以使用以下语法检查Maps中是否存在特定键:
语法 val, ok := map_name[key]
如果只想检查特定键的存在,可以在val
的位置使用下划线(_
)。
示例
package main import ("fmt") func main() { var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964", "day": ""} val1, ok1 := a["brand"] // 检查现有键及其值 val2, ok2 := a["color"] // 检查不存在的键及其值 val3, ok3 := a["day"] // 检查现有键及其值 _, ok4 := a["model"] // 仅检查存在的键而不检查其值 fmt.Println(val1, ok1) fmt.Println(val2, ok2) fmt.Println(val3, ok3) fmt.Println(ok4) }
结果
Ford true false true true
Maps是引用 Maps是对哈希表的引用。
如果两个Maps变量引用同一个哈希表,则更改一个变量的内容会影响另一个变量的内容。
示例
package main import ("fmt") func main() { var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"} b := a fmt.Println(a) fmt.Println(b) b["year"] = "1970" fmt.Println("更改b后:") fmt.Println(a) fmt.Println(b) }
结果
map[brand:Ford model:Mustang year:1964] map[brand:Ford model:Mustang year:1964] 更改b后: map[brand:Ford model:Mustang year:1970] map[brand:Ford model:Mustang year:1970]
**遍历Maps **您可以使用range
来遍历Maps。
示例 以下示例显示了如何遍历Maps中的元素。请注意输出中元素的顺序。
package main import ("fmt") func main() { a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4} for k, v := range a { fmt.Printf("%v : %v, ", k, v) } }
结果
two : 2, three : 3, four : 4, one : 1,
按特定顺序遍历Maps。Maps是无序的数据结构。如果需要按特定顺序遍历Maps,则必须使用单独的数据结构来指定该顺序。
示例 以下示例演示了如何按特定顺序遍历Maps中的元素。
package main import ("fmt") func main() { a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4} var b []string // 定义顺序 b = append(b, "one", "two", "three", "four") for k, v := range a { // 无序循环 fmt.Printf("%v : %v, ", k, v) } fmt.Println() for _, element := range b { // 使用定义的顺序循环 fmt.Printf("%v : %v, ", element, a[element]) } }
结果
two : 2, three : 3, four : 4, one : 1, one : 1, two : 2, three : 3, four : 4,
这篇关于Go Maps的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站