golang中的映射

孤风追影 · · 591 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1. Map
  1. 概念:map是一种特殊的数据结构,一种键值对的无序集合。相当于python中的字典

2. 创建和初始化map
  1. 使用make声明map
    dict := make(map[string]int)
  2. 使用map字面量的方式声明map
    dict := map[string]string {"key1": "value1", "key2": "value2"}
  3. dict := map[int][]string{} 声明了一个存储字符串切片的map
  4. 从map中删除一项
    delete(dict, "key1") 删除键为key1的键值对
  5. map在函数间传递是并不会制造该map的一个副本。实际上,当传入一个map给函数时,并对这个map进行修改时,所有对这个map的引用都会察觉到这个修改。
    Note:map的键可以使任何值,这些值可以使内置的类型,也可以是结构类型,只要这个值可以使用==运算符作比较的。切片,函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为map的键,否则会造成编译错误。

3. 检测map键值对是否存在
  1. 使用val = map["key"]的方式获取key对应的value值,如果map中不存在key,则val的值为空
    _, ok := map1["key"]
    if _, ok := map1["key"]; ok {//statement}

4. map的排序
  1. map默认是无序的,不管是按照key还是value默认都不排序
  2. 如果想对一个map进行排序,就要将其key或者value拷贝到一个切片中,在进行排序,然后使用切片的for-range方法打印出所有的key和value
    package main

    import (
        "fmt".
        "sort"
    )

    var (
          val = map[string]int {
                   "key1": "value1",
                   "key2": "value2",
                   ...
         }
    )
    
    func main() {
        fmt.Println("before")
        for k, v := range val {
             fmt.Println(k, v)
        }

       fmt.Println("after")

       keys := make([]string, len(val))
       i := 0
       for k, _ := range val {
               keys[i] = k
               i++
       }
       sort.Strings(keys)
       for _, k := range keys {
            fmt.Println(k, val[k])
       }
    }

5. map键值对调
    package main

    import "fmt"
    
    var (
           val := map[string] int {
               "key1": "value1",
               "key2": "value2",
               ...
           }
     )
    func main() {
        imap := make(map[int]string, len(val))
        for k, v := range val {
             imap[v] = k 
       }
       for k, v := range imap {
            fmt.Println(k, v)
       }
    }

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

本文来自:简书

感谢作者:孤风追影

查看原文:golang中的映射

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

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