映射
映射是一系列无序的k/v对,可以通过key来对value进行操作,key的值只能为:字符串、数字、布尔、数组,value可以为任意类型
映射的声明
map声明需要指定组成元素key和value的类型,初始值为nil
package main
import "fmt"
func main() {
var nums map[string]int8
fmt.Println("%T,%#v,", nums, nums, nums == nil)
}
go run map.go
map[] map[] true
映射的初始化
- 使用字面量初始化:map[keytype]valuetype{k1:v1…}
- 使用字面量初始化空映射:map[keytype]valuetype{}
- 使用make函数初始化:make(map[keytype]vlauetype)
package main
import "fmt"
func main() {
tels := map[string]string{"a": "1", "b": "2"}
fmt.Printf("%#v\n", tels) // map[string]string{"a":"1", "b":"2"}
a := map[string]int{"a": 100, "b": 200}
fmt.Println(a) // map[a:100 b:200]
b := map[string]int8{}
fmt.Println(b) // map[] 注意与 map[string]int8 的区别
c := make(map[string]float64)
fmt.Println(c)
}
映射的操作
package main
import "fmt"
func main() {
test := map[string]string{"a": "1", "b": "2"}
// fmt.Printf("%#v\n", tels) // map[string]string{"a":"1", "b":"2"}
// a := map[string]int{"a": 100, "b": 200}
// fmt.Println(a) // map[a:100 b:200]
// b := map[string]int8{}
// fmt.Println(b) // map[] 注意与 map[string]int8 的区别
// c := make(map[string]float64)
// fmt.Println(c)
// 获取元素的数量,使用len
fmt.Println(len(test)) // 2
// 访问,当访问的key存在时,返回对应的值,否则返回值类型的零值
fmt.Printf("%#v", test["e"]) // ""
fmt.Println(test["a"], test["b"], test["c"]) // 1 2
// 判断 key 是否存在
// 通过 key 访问元素时可接收两个值,第一个值为 value,第二个值为 bool类型
// 表示元素是否存在,若存在为 true,否则为 false
test1, status := test["x"]
fmt.Printf("%#v, %#v\n", test1, status) // "", false
// 修改&增加
// 使用 key 对映射赋值时当 key 存在则修改 key 对应的 value,若 key 不存在则增加 key 和 value
test["a"] = "100" // 存在
test["x"] = "200" // 不存在
fmt.Printf("%#v\n", test) // map[string]string{"a":"100", "b":"2", "x":"200"}
// 删除 使用delete 函数删除映射中已经存在的 key
delete(test, "x")
fmt.Printf("%#v\n", test) // map[string]string{"a":"100", "b":"2"}
// 遍历 可通过 for-range 对映射中个元素进行遍历,range 返回两个元素分别为映射的 key 和 value
for k, v := range test {
fmt.Printf("%v:%v\n", k, v)
} // a:100 b:2
}