zoukankan      html  css  js  c++  java
  • golang map

                map是go语言中的一种引用类型,所有它具备引用类型的特点,比如拷贝方式、需要初始化等等。map在go语言中通过key和value来访问,并且是无序的,也就是每次迭代的时候,顺序都不一样。

    map定义

    使用关键字map来定义一个map变量

    
    
    func main() {

        //var m = map[int]string{1: "hello world"}
        m := make(map[int]string)
        m[1] = "hello world"
        fmt.Println(m)
    }
     

    初始化

    和slice一样通过make关键字来初始化变量。map可以不传参数,而slice至少传一个,那就是长度。如果一个没有初始化的map是无法使用的。会直接触发panic

    编译可以成功
    PS C:UserscaojiaoyueDesktopgolang> go build PS C:UserscaojiaoyueDesktopgolang> .golang.exe panic: assignment to entry in nil map goroutine 1 [running]: main.main() C:/Users/caojiaoyue/Desktop/golang/main.go:11 +0x4a

    操作key

    添加key

    func main() {
    
        var m map[int]string
        m = make(map[int]string)
        m[1] = "hello world"
        fmt.Println(m)
    }

    删除key

    使用delete关键字,第一个参数要操作的map,第二个参数要删除的key

    func main() {
    
        var m map[string]string
        m = make(map[string]string)
        m["1"] = "hello world"
        m["2"] = "hello world1"
        delete(m, "1")
        fmt.Println(m)
    }

    map迭代

    使用range函数 返回的第一个参数是key,第二个函数是value

    func main() {
    
        var m map[string]string
        m = make(map[string]string)
        m["1"] = "hello world"
        m["2"] = "hello world1"
        for k, v := range m {
            fmt.Println(k, v)
        }
    }

    判断某个key是否存在

    key, ok := m["3"],如果存在ok为true,key就是这个map key对应的值
    func main() {
    
        var m map[string]string
        m = make(map[string]string)
        m["1"] = "hello world"
        m["2"] = "hello world1"
        key, ok := m["3"]
        if !ok {
            fmt.Println("不存在")
        }
        fmt.Println(key)
    }

    map in map

    需要注意的是里层的map初始化

    func main() {
    
        var m map[int]map[string]string
        m = make(map[int]map[string]string)
        m[1] = make(map[string]string)
        m[1]["name"] = "caojioyue"
        m[1]["sex"] = "man"
        m[2] = make(map[string]string)
        m[2]["name"] = "caojioyue"
        m[2]["sex"] = "man"
        fmt.Println(m)
    }

    map in slice

    func main() {
        var m []map[int]string
        m = make([]map[int]string, 2)
        m[0] = map[int]string{1: "caojiaoyue", 2: "hello"}
        fmt.Println(m)
    }

    slice in value of map

    func main() {
    
        var m map[int][]string
        m = make(map[int][]string)
        m[1] = []string{"caojiaoyue", "hello"}
        m[2] = []string{"caojiaoyue", "hello"}
        fmt.Println(m)
    }
  • 相关阅读:
    ubuntu安装Elasticsearch
    PHP如何计算脚本执行时间
    MVC+EF中返回JSON的性能和安全问题
    博客园最新的一个模板样式有问题
    Entity Framework 批量插入很慢吗?我自己测试下
    用 Raphaël 绘制中国地图 + 显示数据
    博客园的手机版(非官方) MVC+jQuery.Mobile
    BitCovert,与移位,加法性能比较
    探讨微软ASP.NET AJAX控件开发技术(客户端)
    (十三)树【C++刷题】
  • 原文地址:https://www.cnblogs.com/Nolover/p/12510406.html
Copyright © 2011-2022 走看看