跳到主要内容

Go语言映射

提示
  1. 创建和使用映射:映射(Map)是 Go 语言中的一种数据结构,用于存储键值对。键是唯一的,每个键都与一个值相关联。可以使用字面量语法或 make() 函数创建映射。
  2. 访问和修改映射:可以通过键来访问或修改映射中的值。使用 map[key] 语法可以获取或设置特定键的值。
  3. 映射的遍历和操作:可以使用 for range 循环遍历映射中的每个键值对。delete() 函数用于从映射中删除键值对,而 append() 函数用于向映射中添加新元素。

在 Go 中,map 数据结构以键/值对的形式存储元素。这里,是与地图上每个相关联的唯一标识符。

在 Golang 中创建 map

创建 Go map 的语法是:

subjectMarks := map[string]float32{"Golang": 85, "Java": 80, "Python": 81}

此代码创建了一个名为 subjectMarks 的 map。这里,

  • [string] - 表明 map 的键是字符串类型
  • float32 - 表明 map 的值是浮点类型
  • {Golang", "Java", "Python"} - map 的键
  • {85, 80, 81} - map 的值

示例:Golang 中的 Map

// 程序用于创建一个 map 并打印其键和值

package main
import "fmt"

func main() {

// 创建一个 map
subjectMarks := map[string]float32{"Golang": 85, "Java": 80, "Python": 81}

fmt.Println(subjectMarks)
}

输出

map[Golang:85 Java:80 Python:81]

这里,我们创建了一个 map 并打印了 map 的键值对。

注意: 我们也可以使用 var 关键字创建 map。例如,

var subjectMarks = map[string]float32{"Golang": 85, "Java": 80, "Python": 81}

在 Golang 中访问 Map 的值

我们可以使用相应的键访问 map 的值。例如,

package main
import "fmt"

func main() {

// 创建一个 map
flowerColor := map[string]string{"Sunflower": "Yellow", "Jasmine": "White", "Hibiscus": "Red"}

// 访问键 Sunflower 的值
fmt.Println(flowerColor["Sunflower"]) // Yellow

// 访问键 Hibiscus 的值
fmt.Println(flowerColor["Hibiscus"]) // Red

}

这里,我们使用了表达式

  • flowerColor["Sunflower"] 来访问键 Sunflower 的值
  • flowerColor["Hibiscus"] 来访问键 Hibiscus 的值

在 Golang 中更改 Map 的值

要更改 map 的值,我们可以直接将新值分配给相应的键。例如,

package main
import "fmt"

func main() {

// 创建一个 map
capital := map[string]string{ "Nepal": "Kathmandu", "US": "New York"}
fmt.Println("初始 Map: ", capital)

// 将 US 的值更改为 Washington DC
capital["US"] = "Washington DC"

fmt.Println("更新后的 Map: ", capital)
}

输出

初始 Map: map[Nepal: Kathmandu US: New York]
更新后的 Map: map[Nepal: Kathmandu US: Washington DC]

在上面的示例中,我们通过重新分配键 "US" 的新值 "Washington DC" 来更改 map 的值

添加 Go Map 元素

到目前为止,我们创建了一个带有预定义元素集的 map。然而,我们也可以向 map 中添加元素。

要添加元素,我们可以分配一个新值和一个新键。例如,

package main
import "fmt"

func main() {

// 创建一个 map
students := map[int]string{1: "John", 2: "Lily"}
fmt.Println("初始 Map: ", students)

// 使用键 3 添加元素
students[3] = "Robin"

// 使用键 5 添加元素
students[5] = "Julie"

fmt.Println("更新后的 Map: ", students)
}

输出

初始 Map: map[1:John 2:Lily]
更新后的 Map: map[1:John 2:Lily 3:Robin 5:Julie]

这里,代码

  • students[3] = "Robin" - 使用键 3 和值 Robin 添加了一个新元素
  • students[5] = "Julie" - 使用键 5 和值 Julie 添加了一个新元素

删除 Go Map 元素

要删除 map 的元素,我们可以使用 delete() 函数。例如,

package main
import "fmt"

func main() {

// 创建一个 map
personAge := map[string]int{"Hermione": 21, "Harry": 20, "John": 25}
fmt.Println("初始 Map: ", personAge)

// 删除键为 John 的 map 元素
delete(personAge, "John")

fmt.Println("更新后的 Map: ", personAge)
}

输出

初始 Map: map[Harry:20 Hermione:21 John:25]
更新后的 Map: map[Harry:20 Hermione:21]

这里,我们使用了 delete() 函数删除了由键 "John" 表示的元素。

delete(personAge, "John")

该函数接受两个参数:

  • personAge - map 的名称
  • John - 要删除的元素的键

注意: 如果传递给 delete() 函数的键在 map 中不存在,该函数将不执行任何操作。

在 Golang 中遍历 Map

我们可以使用 Go for range 循环 遍历 map 的每个元素。例如,

package main
import "fmt"

func main() {

// 创建一个 map
squaredNumber := map[int]int{2: 4, 3: 9, 4: 16, 5: 25}

// for-range 循环遍历 map 的每个键值对
for number, squared := range squaredNumber {
fmt.Printf("数字 %d 的平方是 %d\n", number, squared)
}

}

输出

数字 2 的平方是 4
数字 3 的平方是 9
数字 4 的平方是 16
数字 5 的平方是 25

在上面的代码中,for range 循环访问了 map 的每个键/值对。

for range 循环的工作原理

迭代numbersquared
124
239
3416
4525

注意: 我们使用了 Printf() 函数使输出更加清晰易懂。

常见问题

使用 make() 函数创建 Go Map

到目前为止,我们在创建 map 时提供了初始值。然而,如果我们需要在没有任何初始值的情况下创建 map,我们可以使用 make() 函数。

package main
import "fmt"

func main() {

// 使用 make() 创建 map
student := make(map[int]string)

// 向 map 添加元素
student[1] = "Harry"
student[2] = "Lilly"
student[5] = "Harmonie"

fmt.Println(student)
}

输出

map[1:Harry 2:Lilly 5:Harmonie]

一旦我们使用 make() 函数创建了 map,我们就可以对 map 进行所有其他操作(更改、删除、访问)。

访问 Golang Map 的键

我们还可以使用 for range 来仅访问 map 的键。例如,

package main
import "fmt"

func main() {

// 创建一个 map
places := map[string]string{"Nepal": "Kathmandu", "US": "Washington DC", "Norway": "Oslo"}

// 仅访问 map 的键
for country := range places {
fmt.Println(country)
}

}

输出

Nepal
US
Norway

注意 for range 循环的使用,

for country := range places {

这里,第二个实体(首都)没有使用,因为我们只想检索 map 的键 "Nepal", "US", "Norway"

使用空标识符访问 Go Map 的值

我们使用空标识符 _ 和 for range 循环来访问 map 的值。例如,

package main
import "fmt"

func main() {
places := map[string]string{"Nepal": "Kathmandu", "US": "Washington DC", "Norway": "Oslo"}

for _, capital := range places {
fmt.Println(capital)
}

}

输出

Kathmandu
Washington DC
Oslo

注意我们在代表国家(键)的地方使用了 _。这是因为在 for 循环的主体中,我们必须使用我们声明的每一个变量。

因此,如果我们使用了 country(表示键的变量),那么我们必须在循环内部使用它。否则,我们将会得到一个错误。

places := map[string]string{"Nepal": "Kathmandu", "US": "Washington DC", "Norway": "Oslo"}

// 声明了 country 变量但没有使用
for country, capital := range places {
// 抛出错误
fmt.Println(capital)
}