在本教程中,您将了解什么是map数据类型以及何时在Golang中使用它。
映射是一种数据结构,它为您提供键/值对的无序集合(映射有时也称为PHP中的关联数组、Java中的哈希表或Python中的字典)。映射用于通过其关联的键查找值。您可以基于键将值存储到映射中。
映射的优势在于它能够根据键快速检索数据。键的工作方式类似于索引,指向与该键关联的值。
映射是使用哈希表实现的,哈希表提供了对数据元素的更快查找,您可以通过提供键轻松检索值。映射是无序集合,无法预测键/值对的返回顺序。对映射的每次迭代都可能返回不同的顺序。
map初始化
在Golang中,地图是用大括号写的,它们有键和值。
package main
import "fmt"
var employee = map[string]int{"Mark": 10, "Sandy": 20}
func main() {
fmt.Println(employee)
}
空map声明
创建将字符串作为键类型且int作为值类型的员工map
package main
import "fmt"
func main() {
var employee = map[string]int{}
fmt.Println(employee) // map[]
fmt.Printf("%T\n", employee) // map[string]int
}
使用make函数进行map声明
make函数将映射的类型作为参数,并返回初始化的映射。
package main
import "fmt"
func main() {
var employee = make(map[string]int)
employee["Mark"] = 10
employee["Sandy"] = 20
fmt.Println(employee)
employeeList := make(map[string]int)
employeeList["Mark"] = 10
employeeList["Sandy"] = 20
fmt.Println(employeeList)
}
map长度
要确定map有多少项(键值对),请使用内置的len()函数。len()函数将为未初始化的映射返回零。
package main
import "fmt"
func main() {
var employee = make(map[string]int)
employee["Mark"] = 10
employee["Sandy"] = 20
employeeList := make(map[string]int)
fmt.Println(len(employee)) // 2
fmt.Println(len(employeeList)) // 0
}
访问元素
您可以通过引用map的键名称(在方括号内)来访问map的项目。
package main
import "fmt"
func main() {
var employee = map[string]int{"Mark": 10, "Sandy": 20}
fmt.Println(employee["Mark"])
}
添加元素
通过使用新的索引键并为其分配值,可以将项添加到map中。
package main
import "fmt"
func main() {
var employee = map[string]int{"Mark": 10, "Sandy": 20}
fmt.Println(employee)
employee["Rocky"] = 30
employee["Josef"] = 40
fmt.Println(employee)
}
更新值
您可以通过引用特定项的键名称来更新其值。
将mark更改为50
package main
import "fmt"
func main() {
var employee = map[string]int{"Mark": 10, "Sandy": 20}
fmt.Println(employee)
employee["Mark"] = 50
fmt.Println(employee)
}
删除元素
内置的delete()函数从与提供的键关联的给定map中删除项目。
package main
import "fmt"
func main() {
var employee = make(map[string]int)
employee["Mark"] = 10
employee["Sandy"] = 20
employee["Rocky"] = 30
employee["Josef"] = 40
fmt.Println(employee)
delete(employee, "Mark")
fmt.Println(employee)
}
遍历map
for…range循环语句可用于获取映射的索引和元素。
每次迭代返回一个键及其相关元素内容。
package main
import "fmt"
func main() {
var employee = map[string]int{"Mark": 10, "Sandy": 20,
"Rocky": 30, "Rajiv": 40, "Kate": 50}
for key, element := range employee {
fmt.Println("Key:", key, "=>", "Element:", element)
}
}
清空map
有两种方法可以从map中清除所有项目。
package main
func main() {
var employee = map[string]int{"Mark": 10, "Sandy": 20,
"Rocky": 30, "Rajiv": 40, "Kate": 50}
// 方法1
for k := range employee {
delete(employee, k)
}
// 方法2
employee = make(map[string]int)
}
对map键进行排序
创建的键切片,用于存储映射的键值,然后对切片进行排序。用于按键顺序打印地图值的排序切片。
package main
import (
"fmt"
"sort"
)
func main() {
unSortedMap := map[string]int{"India": 20, "Canada": 70, "Germany": 15}
keys := make([]string, 0, len(unSortedMap))
for k := range unSortedMap {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, unSortedMap[k])
}
}
对map值进行排序
要对map的键值进行排序,您需要将它们存储在切片中,然后对切片进行排序。
package main
import (
"fmt"
"sort"
)
func main() {
unSortedMap := map[string]int{"India": 20, "Canada": 70, "Germany": 15}
values := make([]int, 0, len(unSortedMap))
for _, v := range unSortedMap {
values = append(values, v)
}
sort.Ints(values)
for _, v := range values {
fmt.Println(v)
}
}
合并map
package main
import "fmt"
func main() {
first := map[string]int{"a": 1, "b": 2, "c": 3}
second := map[string]int{"a": 1, "e": 5, "c": 3, "d": 4}
for k, v := range second {
first[k] = v
}
fmt.Println(first)
}