【Golang 基础】Go 语言的 Map

爱写作的程序猿 · · 574 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Go 语言中的Map

  Map 是一个无序的键值对数据集合,通过 key 快速检索数据。

  • 通过 map[keyType]valueType 格式声明 Map
package basic

import "fmt"

func DeclaratMap(){
    // 声明一个空的 map
    m1 := map[int]string{}
    fmt.Println(m1) // map[]

    // 声明一个 map 并赋初始值
    m2 := map[int]string{ 0: "Java", 1: "C#", 2: "Python", 3: "Golang" }
    fmt.Println(m2) // map[3:Golang 0:Java 1:C# 2:Python]
}
  • 通过 make(map[keyType]ValueType, cap) 格式声明 Map其中 cap 表示容量,可以省略,当 Map 超过设置的容量时,会自动扩展
package basic

import "fmt"

func DeclaratMapByMake() {
    m := make(map[int]string, 3)
    m[0] = "Java"
    m[1] = "C#"
    m[2] = "Python"

    fmt.Println(m, len(m)) // map[1:C# 2:Python 0:Java] 3

    m[3] = "Golang"
    fmt.Println(m, len(m)) // map[0:Java 1:C# 2:Python 3:Golang] 4
}

Mapkey 必须是支持 ==!= 比较运算符的数据类型。

  • 通过使用 for range 遍历 Map;
func TraverseMap() {
    m2 := map[int]string{0: "Java", 1: "C#", 2: "Python", 3: "Golang"}
    
    for key, value := range m2 {
        fmt.Println(key, ":", value)
    }
}
  • Map 是支持嵌套的,但是需要对嵌套后的 Map 进行初始化;
func NestedMap() {
    var array = [...]string{"Java", "C#", "Python", "Golang"}
    
   // 声明一个 嵌套 map 父级 key  类型为 int,value 为map
    m := make(map[int]map[string]int)
    
    for i, value := range array {
       // 判断嵌套的 map 是否初始化
        _, isMake := m[i][value]
        if !isMake {
            // 对嵌套的 map 初始化
            m[i] = make(map[string]int)
        }
        m[i][value] = i
    }
    
    fmt.Println(m) // map[0:map[Java:0] 1:map[C#:1] 2:map[Python:2] 3:map[Golang:3]]
}

Map 的操作

  • Map 的取值

  可以直接通过 map[key] 的方式取 Map 中的值,当 key 值不存在时,则会返回一个 value 的初始值;

func GetMapValue() {
    m1 := map[string]int{"Golang": 20, "Java": 30, "C#": 40}
    fmt.Println(m1["Python"]) // 0
}

   那么问题来了,如果我们想要通过用户提供的 key 获取的值做判断,key 如果不存在,则添加,该如何判断呢?

实际上, map[key] 有两个返回值,一个是根据 key 返回的值,另一个则是用于判断 key 是否存在

func GetMapValue() {
    m1 := map[string]int{"Golang": 20, "Java": 30, "C#": 40}
    if _, isExist := m1["Python"]; !isExist {
        m1["Python"] = 10
    }
    fmt.Println(m1) // map[C#:40 Python:10 Golang:20 Java:30]
}
  • 删除 Map 中的数据

  使用 delete(map, key) 方法删除 Map 中的数据;

func DeleteMapData(){
    m1 := map[string]int{"Golang": 20, "Java": 30, "C#": 40}
    fmt.Println(m1) // map[Golang:20 Java:30 C#:40] 
    delete(m1, "Java")
    fmt.Println(m1) // map[Golang:20 C#:40]
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:爱写作的程序猿

查看原文:【Golang 基础】Go 语言的 Map

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

574 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传