【Golang 基础】Go 语言的 Map

作者: hvkcoder | 来源:发表于2019-03-27 21:57 被阅读2次

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]
}

相关文章

  • 10.map

    Go语言基础之map | Golang Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 ...

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • 【Golang 基础】Go 语言的 Map

    Go 语言中的Map   Map 是一个无序的键值对数据集合,通过 key 快速检索数据。 通过 map[keyT...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • golang使用技巧

    golang map赋值是引用拷贝 返回值 可以放入一行中 go tools 里面支持vscode跳转 go语言c...

  • 开发自己的区块链基础功能篇

    准备工作: 安装go开发环境 用go搭建web服务 go语言基础 安装go开发环境 到https://golang...

  • Go语言代码风格

    Go语言代码说明 Go 语言[https://haicoder.net/golang/golang-tutoria...

  • Gox语言入门1:安装与环境配置

    Gox语言(官网[http://topget.org/gox.html])是以Go语言(Golang)为基础的解释...

  • Golang 学习笔记(01)—— 基础

    本文为转载,原文:Golang 学习笔记(01)—— 基础 Golang介绍 Go语言是由Google开发的一个开...

  • golang map的底层实现

    golang map的底层实现 粗略的讲,Go语言中map采用的是哈希查找表,由一个key通过哈希函数得到哈希值,...

网友评论

    本文标题:【Golang 基础】Go 语言的 Map

    本文链接:https://www.haomeiwen.com/subject/ehlxbqtx.html