Golang教程-Go Map

Go Map(映射)
在Go语言中,Map(映射)是键值对的无序集合。它们非常适合快速查找值。键类型必须定义了==和!=操作,例如string、int、float。
因此,数组、切片和结构体不能用作键类型,但指针和接口类型可以。
当我们提供Key()或Hash()方法时,可以将结构体用作键,从而可以从结构体的字段计算出唯一的数字或字符串键。
映射是引用类型,并且通常声明为:
var map1 map[keytype]valuetype
例如:
var map1 map[int]string
Go Map示例
package main
import "fmt"
func main () {
x := map[string]int{"Kate":28,"John":37, "Raj":20}
fmt.Print(x)
fmt.Println("\n",x["Raj"])
}
输出:
map[John:37 Raj:20 Kate:28]
20
Go Map插入和更新操作
在Go映射中,更新和插入操作类似。如果映射中不包含提供的键,则进行插入操作;如果键存在于映射中,则进行更新操作。
package main
import "fmt"
func main() {
m := make(map[string]int)
fmt.Println(m)
m["Key1"] = 10
m["Key2"] = 20
m["Key3"] = 30
fmt.Println(m)
m["Key2"] = 555
fmt.Println(m)
}
输出:
map[]
map[Key3:30 Key1:10 Key2:20]
map[Key1:10 Key2:555 Key3:30]
Go Map删除操作
您可以使用delete()函数删除Go映射中的元素。
语法:
delete(map, key)
例子:
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Key1"] = 10
m["Key2"] = 20
m["Key3"] = 30
fmt.Println(m)
delete(m, "Key3")
fmt.Println(m)
}
输出:
map[Key1:10 Key2:20 Key3:30]
map[Key2:20 Key1:10]
Go Map检索元素
语法:
elem = m[key]
示例:
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Key1"] = 10
m["Key2"] = 20
m["Key3"] = 30
fmt.Println(m)
fmt.Println("The value:", m["Key2"])
}
输出:
map[Key1:10 Key2:20 Key3:30]
The value: 20
我们还可以使用带有两个值的示例来测试键是否存在
语法:
elem, ok = m[key]
如果键不存在,则elem的值为元素类型的默认值。
如果elem的类型为int,则elem的值为零。
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Key1"] = 10
m["Key2"] = 20
m["Key3"] = 30
fmt.Println(m)
v, ok := m["Key2"]
fmt.Println("The value:", v, "Present?", ok)
i, j := m["Key4"]
fmt.Println("The value:", i, "Present?", j)
}
输出:
map[Key1:10 Key2:20 Key3:30]
The value: 20 Present? true
The value: 0 Present? false
在Go语言中,映射类似于结构体,但需要键。
Go结构体映射
package main
import "fmt"
type Vertex struct {
Latitude, Longitude float64
}
var m = map[string]Vertex{
"JavaTpoint": Vertex{ 40.68433, -74.39967, },
"SSS-IT": Vertex{ 37.42202, -122.08408, },
}
func main() {
fmt.Println(m)
}
输出:
map[JavaTpoint:{40.68433 -74.39967} SSS-IT:{37.42202 -122.08408}]