映射 (Map) 教程

1. 概述

在Go语言中,映射(Map)是一种无序的键值对集合。映射提供了一种快速查找和存储数据的方式,类似于其他编程语言中的字典或哈希表。映射的键必须是唯一的,而值可以是任意类型。

2. 基本语法

2.1 声明和初始化

映射的声明和初始化可以通过以下几种方式进行:

// 声明一个空的映射
var m1 map[string]int

// 使用make函数初始化映射
m2 := make(map[string]int)

// 声明并初始化一个带有初始值的映射
m3 := map[string]int{
    "apple":  5,
    "banana": 3,
}

2.2 添加和修改元素

可以通过以下方式向映射中添加或修改元素:

m2["orange"] = 7
m2["apple"] = 10 // 修改已存在的键值

2.3 访问元素

可以通过键来访问映射中的值:

value := m3["apple"] // value 的值为 5

如果访问一个不存在的键,Go会返回该值类型的零值:

value := m3["grape"] // value 的值为 0

2.4 检查键是否存在

可以通过以下方式检查键是否存在:

value, exists := m3["banana"]
if exists {
    fmt.Println("Banana exists with value:", value)
} else {
    fmt.Println("Banana does not exist")
}

2.5 删除元素

可以使用delete函数删除映射中的元素:

delete(m3, "apple")

2.6 遍历映射

可以使用for循环遍历映射中的所有键值对:

for key, value := range m3 {
    fmt.Printf("Key: %s, Value: %d\n", key, value)
}

3. 代码示例

以下是一个完整的示例,展示了如何声明、初始化、添加、修改、访问、删除和遍历映射:

package main

import "fmt"

func main() {
    // 声明并初始化一个映射
    fruits := map[string]int{
        "apple":  5,
        "banana": 3,
    }

    // 添加新元素
    fruits["orange"] = 7

    // 修改已存在的元素
    fruits["apple"] = 10

    // 访问元素
    fmt.Println("Number of apples:", fruits["apple"])

    // 检查键是否存在
    if value, exists := fruits["banana"]; exists {
        fmt.Println("Banana exists with value:", value)
    } else {
        fmt.Println("Banana does not exist")
    }

    // 删除元素
    delete(fruits, "apple")

    // 遍历映射
    for key, value := range fruits {
        fmt.Printf("Key: %s, Value: %d\n", key, value)
    }
}

4. 实践练习

练习1:统计单词频率

编写一个程序,读取一段文本,并统计每个单词出现的频率。将结果存储在一个映射中,并输出每个单词及其出现的次数。

练习2:学生成绩管理系统

编写一个简单的学生成绩管理系统。使用映射存储学生的姓名和对应的成绩。实现以下功能:

  1. 添加学生及其成绩。
  2. 修改学生的成绩。
  3. 删除学生。
  4. 查询某个学生的成绩。
  5. 输出所有学生的成绩。

5. 总结

映射是Go语言中非常有用的数据结构,适用于需要快速查找和存储数据的场景。通过本教程,你应该已经掌握了映射的基本操作,包括声明、初始化、添加、修改、访问、删除和遍历。希望你能通过实践练习进一步巩固这些知识。