Maps用于以键值对的形式存储数据值。Maps中的每个元素都是一个键值对。Maps是一个无序且可更改的集合,不允许重复。Maps的长度是其元素的数量。您可以使用 len() 函数来查找长度。Maps的默认值是 nil。Maps保存对底层哈希表的引用。

Go语言有多种方法来创建Maps。

使用 var 和 := 语法创建Maps

var a = map[KeyType]ValueType{key1:value1, key2:value2,...}

b := map[KeyType]ValueType{key1:value1, key2:value2,...}

示例

以下示例展示了如何在Go中创建Maps。请注意代码中和输出中的顺序。

package main

import ("fmt")

func main() {

var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}

b := map[string]int{"Oslo": 1, "Bergen": 2, "Trondheim": 3, "Stavanger": 4}

fmt.Printf("a\t%v\n", a)

fmt.Printf("b\t%v\n", b)

}

结果:

a map[brand:Ford model:Mustang year:1964]

b map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]

注意:代码中定义的Maps元素的顺序与它们存储的方式不同。数据以一种能够从Maps中高效检索数据的方式存储。

使用 make() 函数创建Maps

var a = make(map[KeyType]ValueType)

b := make(map[KeyType]ValueType)

示例

以下示例展示了如何使用 make() 函数在Go中创建Maps。

package main

import ("fmt")

func main() {

var a = make(map[string]string) // Maps 现在为空

a["brand"] = "Ford"

a["model"] = "Mustang"

a["year"] = "1964"

// a 不再为空

b := make(map[string]int)

b["Oslo"] = 1

b["Bergen"] = 2

b["Trondheim"] = 3

b["Stavanger"] = 4

fmt.Printf("a\t%v\n", a)

fmt.Printf("b\t%v\n", b)

}

结果:

a map[brand:Ford model:Mustang year:1964]

b map[Bergen:2 Oslo:1 Stavanger:4 Trondheim:3]

创建一个空Maps

创建空Maps有两种方式。一种是使用 make() 函数,另一种是使用以下语法。

var a map[KeyType]ValueType

注意:使用 make() 函数是创建空Maps的正确方式。如果以不同的方式创建空Maps并写入它,将会引发运行时错误。

示例

以下示例演示了使用 make() 函数和不使用 make() 函数声明空Maps的区别。

package main

import ("fmt")

func main() {

var a = make(map[string]string)

var b map[string]string

fmt.Println(a == nil)

fmt.Println(b == nil)

}

结果:

false

true

允许的键类型

Maps键可以是任何定义了等号运算符(==)的数据类型,包括:

布尔值数字字符串数组指针结构体接口(只要动态类型支持等号运算)

不允许的键类型包括:

切片Maps函数

这些类型是不允许的,因为它们不支持等号运算(==)。

允许的值类型

Maps的值可以是任何类型。

访问Maps元素

您可以通过以下方式访问Maps元素:

value = map_name[key]

示例

以下示例演示了如何访问Maps元素。

package main

import ("fmt")

func main() {

var a = make(map[string]string)

a["brand"] = "Ford"

a["model"] = "Mustang"

a["year"] = "1964"

fmt.Printf(a["brand"])

}

结果:

Ford

更新和添加Maps元素

要更新或添加元素,可以使用以下方式:

map_name[key] = value

示例

以下示例演示了如何更新和添加元素到Maps中。

package main

import ("fmt")

func main() {

var a = make(map[string]string)

a["brand"] = "Ford"

a["model"] = "Mustang"

a["year"] = "1964"

fmt.Println(a)

a["year"] = "1970" // 更新元素

a["color"] = "red" // 添加元素

fmt.Println(a)

}

结果:

map[brand:Ford model:Mustang year:1964]

map[brand:Ford color:red model:Mustang year:1970]

从Maps中删除元素删除元素使用delete()函数。

语法

delete(map_name, key)

示例

package main

import ("fmt")

func main() {

var a = make(map[string]string)

a["brand"] = "Ford"

a["model"] = "Mustang"

a["year"] = "1964"

fmt.Println(a)

delete(a, "year")

fmt.Println(a)

}

结果

map[brand:Ford model:Mustang year:1964] map[brand:Ford model:Mustang]

检查Maps中特定元素的存在 您可以使用以下语法检查Maps中是否存在特定键:

语法 val, ok := map_name[key]

如果只想检查特定键的存在,可以在val的位置使用下划线(_)。

示例

package main

import ("fmt")

func main() {

var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964", "day": ""}

val1, ok1 := a["brand"] // 检查现有键及其值

val2, ok2 := a["color"] // 检查不存在的键及其值

val3, ok3 := a["day"] // 检查现有键及其值

_, ok4 := a["model"] // 仅检查存在的键而不检查其值

fmt.Println(val1, ok1)

fmt.Println(val2, ok2)

fmt.Println(val3, ok3)

fmt.Println(ok4)

}

结果

Ford true false true true

Maps是引用 Maps是对哈希表的引用。

如果两个Maps变量引用同一个哈希表,则更改一个变量的内容会影响另一个变量的内容。

示例

package main

import ("fmt")

func main() {

var a = map[string]string{"brand": "Ford", "model": "Mustang", "year": "1964"}

b := a

fmt.Println(a)

fmt.Println(b)

b["year"] = "1970"

fmt.Println("更改b后:")

fmt.Println(a)

fmt.Println(b)

}

结果

map[brand:Ford model:Mustang year:1964] map[brand:Ford model:Mustang year:1964]

更改b后:

map[brand:Ford model:Mustang year:1970] map[brand:Ford model:Mustang year:1970]

**遍历Maps **您可以使用range来遍历Maps。

示例 以下示例显示了如何遍历Maps中的元素。请注意输出中元素的顺序。

package main

import ("fmt")

func main() {

a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}

for k, v := range a {

fmt.Printf("%v : %v, ", k, v)

}

}

结果

two : 2, three : 3, four : 4, one : 1,

按特定顺序遍历Maps。Maps是无序的数据结构。如果需要按特定顺序遍历Maps,则必须使用单独的数据结构来指定该顺序。

示例 以下示例演示了如何按特定顺序遍历Maps中的元素。

package main

import ("fmt")

func main() {

a := map[string]int{"one": 1, "two": 2, "three": 3, "four": 4}

var b []string // 定义顺序

b = append(b, "one", "two", "three", "four")

for k, v := range a { // 无序循环

fmt.Printf("%v : %v, ", k, v)

}

fmt.Println()

for _, element := range b { // 使用定义的顺序循环

fmt.Printf("%v : %v, ", element, a[element])

}

}

结果

two : 2, three : 3, four : 4, one : 1,

one : 1, two : 2, three : 3, four : 4,

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: