本文系第十四篇Golang语言学习教程
What is maps?
map是在 go 中将键(key) 与值(value)关联的内置类型. 通过相应的键可以获取到值.
创建 map
通过向 make
函数传入键和值的类型, 可以创建 map. make(map[type of key]type of value)
是创建 map 的语法.
money := make(map[string]int)
以上创建了一个名为money
的map, 其中键的类型是string
, 值的类型是int
.
map 初始值为空, 需要给 map 添加元素
给 map 添加元素
给 map 添加元素的语法和数组相同.
例1:
package main
import "fmt"
func main() {
money := make(map[string]int) //创建 一个名为 money 的 map
money["xunk"] = 20000
money["ergou"] = 30000
money["jobs"] = 40000 //给 money 添加元素
fmt.Println("money's map is ", money)
}
上面的程序输出为 : money's map is map[xunk:20000 ergou:30000 jobs:40000]
也可以在声明的时候初始化 map.
例2:
package main
import "fmt"
func main() {
money := map[string]int {
"xunk" : 2000,
"ergou" : 3000,
"jobs" : 4000,
}
money["bill"] = 6000
fmt.Println("money's map is ", money)
}
以上程序在声明 map 时添加了三个元素, 之后又添加了 bill , 程序输出为:
money's map is map[xunk:2000 ergou:3000 jobs:4000 bill:6000]
键不一定只能是 string 类型。所有可比较的类型,如 boolean,interger,float,complex,string 等,都可以作为键。
获取 map 中的元素
获取 map 的元素语法为:map[key]
package main
import "fmt"
//make(map(type of key)type of value)
func main() {
money := map[string]int { //声明时添加值
"xunk" : 2000,
"ergou" : 3000,
"jobs" : 4000,
}
money["bill"] = 6000
name := "jobs"
fmt.Println("the money of ", name, "is ", money[name])
}
以上程序获取了 jobs 的钱数, 并打印出来. 程序输出为: the money of jobs is 4000
如果获取一个不存在的元素, map 会返回一个该类型就元素的零值. 如上程序中, 我们获取一个不存在的键, 会返回 int
类型的值 0
.
money := map[string]int { //声明时添加值
"xunk" : 2000,
"ergou" : 3000,
"jobs" : 4000,
}
money["bill"] = 6000
fmt.Println("the money of danny is ", money["danny"])
}
程序输出为: the money of danny is 0
查看 map 中是否存在这个 key , 语法为: value, ok := map[key]
money := map[string]int { //声明时添加值
"xunk" : 2000,
"ergou" : 3000,
"jobs" : 4000,
}
money["bill"] = 6000
newname := "jenny"
value, ok := money[newname]
if ok == true {
fmt.Println("jenny's money is ", value)
} else {
fmt.Println(newname,"not found")
}
}
以上程序中, 如果 ok
= true , 则表示这个键存在, 对应的值是value
, 反之则不存在.
程序输出为:
jenny not found
遍历 map 中的元素, 需要用到for range
循环:
for key, value := range money{
fmt.Printf("map[%s] = %d\n", key, value)
}
以上程序输出为:
map[xunk] = 2000
map[ergou] = 3000
map[jobs] = 4000
map[bill] = 6000
删除 map 中的元素
删除 map 中的元素语法是: delete(map,key)
, 这个函数没有返回值.
book := map[string]int {
"bainiangudu" : 3,
"fooled" : 2,
"blockchain" : 1,
}
delete(book, "bainiangudu")
fmt.Println(book)
}
以上程序中删除了键 bainiangudu
, 程序输出为:
map[fooled:2 blockchain:1]
map 是引用类型
和 slice 一样, map 也是引用类型, 当 map 被赋值一个新变量时, 它们指向同一个内部数据结构, 当改变其中一个变量时, 就会影响到另一个.
newmoney := money
newmoney["xunk"] = 5000
fmt.Println(money["xunk"])
以上程序中, 将 money
赋值给 newmoney
, 然后改变 newmoney
中的 xunk
值, 则 money
中的 xunk
值也发生改变. 程序输出为:
5000
以上为学习Golang maps篇