Golang Maps 数据类型(map)
map介绍
- 介绍:
map 是在 Go 中将值(value)与键(key)关联的内置类型。
通过相应的键可以获取到值。
等同于python中的字典(dict)
- map 属于引用类型:
map和 slices 类似,map 也是引用类型。
当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。
因此,改变其中一个变量,就会影响到另一变量。
- map的相等性:
map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil。
声明map(创建map)
- 创建map的语法:make(map[Tkey]Tvalue)
- 示例: make(map[string]int)
- 创建一个 key为string类型,值为int类型的map
- 声明map:
- 语法: var 变量名 map[T-key]T-value
- 初始化:必须使用make初始化;
增删改查
- 增加:
- 初始化后,直接增加:
- 示例:
package main import ( "fmt" ) func main() { personSalary := make(map[string]int) personSalary["steve"] = 12000 personSalary["jamie"] = 15000 personSalary["mike"] = 9000 fmt.Println("personSalary map contents:", personSalary) } // 打印内容:personSalary map contents: map[steve:12000 jamie:15000 mike:9000]
- 初始化时增加:
- 示例:
package main import ( "fmt" ) func main() { personSalary := map[string]int { "steve": 12000, "jamie": 15000, } personSalary["mike"] = 9000 fmt.Println("personSalary map contents:", personSalary) } // 打印内容:personSalary map contents: map[steve:12000 jamie:15000 mike:9000]
- 删除:
- 语法:delete(map, key) 没有返回值;
- 示例:
package main import ( "fmt" ) func main() { personSalary := map[string]int{ "steve": 12000, "jamie": 15000, } personSalary["mike"] = 9000 fmt.Println("map before deletion", personSalary) delete(personSalary, "steve") fmt.Println("map after deletion", personSalary) } // 打印内容: map before deletion map[steve:12000 jamie:15000 mike:9000] map after deletion map[mike:9000 jamie:15000]
- 获取:
- 通过key直接取:
- 语法: value, ok := 字典名["key"];ok: 当key存在的时候 返回 true,不存在返回 false,且 可以不写;
- 示例:
package main import ( "fmt" ) func main() { dict := map[int]string{ 1: "Python", 2: "Linux", 3: "Golang", } fmt.Println(dict[1]) // value := dict[2] value, ok := dict[2] // var value int // value, ok := dict[4] fmt.Println(value, ok) }
- 获取map的长度:
获取 map 的长度使用 len 函数。
- for range 循环
package main import ( "fmt" ) func main() { personSalary := map[string]int{ "steve": 12000, "jamie": 15000, } personSalary["mike"] = 9000 fmt.Println("All items of a map") for key, value := range personSalary { fmt.Printf("personSalary[%s] = %d\n", key, value) } }