1.golang map
map是一种key:value
键值对的数据结构容器。map内部实现是哈希表(hash
).
map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。
map是引用类型的。
1.1map的语法格式
可以使用内建函数make也可以使用map关键字来定义map
go
/* 声明变量,默认map是nil */
var map_variable map[key_data_type]value_data_type
/* 使用make 函数 */
map_variable = make(map[key_data_type]value_data_type)
/* 声明变量,默认map是nil */
var map_variable map[key_data_type]value_data_type
/* 使用make 函数 */
map_variable = make(map[key_data_type]value_data_type)
map_variable
:map变量名称
key_data_type
:key的数据类型
value_data_type
:值的数据类型
初始化
go
func mapsFunc() {
//类型声明
var m1 map[string]string
m1 = make(map[string]string)
fmt.Printf("m1: %v\n", m1)
fmt.Printf("m1: %T\n", m1)
println("---------初始化1---------")
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
//map 打印是无序的
fmt.Printf("m2: %v\n", m2)
println("---------初始化2---------")
m3 := make(map[string]string)
m3["name"] = "tom"
m3["age"] = "20"
m3["email"] = "xx@163.com"
fmt.Printf("m3: %v\n", m3)
}
func mapsFunc() {
//类型声明
var m1 map[string]string
m1 = make(map[string]string)
fmt.Printf("m1: %v\n", m1)
fmt.Printf("m1: %T\n", m1)
println("---------初始化1---------")
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
//map 打印是无序的
fmt.Printf("m2: %v\n", m2)
println("---------初始化2---------")
m3 := make(map[string]string)
m3["name"] = "tom"
m3["age"] = "20"
m3["email"] = "xx@163.com"
fmt.Printf("m3: %v\n", m3)
}
访问
go
func mapAccessFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
var key = "name"
var value = m2[key]
fmt.Printf("value: %v\n", value)
}
func mapAccessFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
var key = "name"
var value = m2[key]
fmt.Printf("value: %v\n", value)
}
键位是否存在
go语言中有个判断map中键是否存在的特殊写法,格式如下:
go
value,ok:=map[key]
value,ok:=map[key]
如果ok为true,存在,否则,不存在
go
func keyExitFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
var k1 = "name"
var k2 = "name1"
v, ok := m2[k1]
fmt.Printf("v: %v\n", v)
println("-----")
v, ok = m2[k2]
fmt.Printf("v: %v\n", v)
fmt.Printf("ok: %v\n", ok)
}
func keyExitFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
var k1 = "name"
var k2 = "name1"
v, ok := m2[k1]
fmt.Printf("v: %v\n", v)
println("-----")
v, ok = m2[k2]
fmt.Printf("v: %v\n", v)
fmt.Printf("ok: %v\n", ok)
}
2.map遍历
可以使用for range
循环进行map遍历,得到key和value值。
2.1遍历key
go
func mapSearchFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
for key := range m2 {
fmt.Printf("key: %v\n", key)
}
}
func mapSearchFunc() {
var m2 = map[string]string{"name": "tom", "age": "20", "email": "xx@163.com"}
for key := range m2 {
fmt.Printf("key: %v\n", key)
}
}
2.2遍历key和value
go
func mapSearchFunc() {
println("------------key-value")
for key, value := range m2 {
fmt.Printf("%v:%v\n", key, value)
}
}
func mapSearchFunc() {
println("------------key-value")
for key, value := range m2 {
fmt.Printf("%v:%v\n", key, value)
}
}