Golang map

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

map

  • 类似其他语言中的哈希表或者字典,以key-value形式存储数据
  • key必须是支持==或!=比较运算的类型,不可以是函数、map或slice
  • map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
  • map使用make()创建,支持:=这种简写方式
package main

import (
    "fmt"
)

func main() {
    var m map[int]string //使用var关键字,[key类型]value类型
    m = map[int]string{}   //初始化这个map
    //m = make(map[int]string)
    m2 := make(map[int]string)  //这样都是实现map的简单初始化的方法
    fmt.Println(m)
    fmt.Println(m2)
}
package main

import (
    "fmt"
)

func main() {
    m2 := make(map[int]string)
    m2[1] = "ok"
    fmt.Println(m2)
    delete(m2, 1) //删除一个键值对
    a := m2[1]    //取出key为1的值
    fmt.Println(a)
}
package main

import (
    "fmt"
)

func main() {
    var m map[int]map[int]string
    m = make(map[int]map[int]string) //对m进行初始化
    m[1] = make(map[int]string)      //此时对key为1的map进行初始化
    m[1][1] = "ok"                   //对key为1的map中的key为1的string进行赋值为ok
    a := m[1][1]                     //取值
    fmt.Println(a)
}
package main

import (
    "fmt"
)

func main() {
    var m map[int]map[int]string
    m = make(map[int]map[int]string) //对m进行初始化
    a, ok := m[2][1]                 //此时没有对key为2的map进行初始化,所以ok的返回值是false,a的值为空
    fmt.Println(a, ok)
    if !ok {
        m[2] = make(map[int]string)

    }
    m[2][1] = "hello"
    a, ok = m[2][1]
    fmt.Println(a, ok)
}
  • make([keyType]value Type, cap),cap表示容量,可省略
  • 超出容量时会自动扩容,但尽量提供一个合理的初始值
  • 使用len()获取元素个数
package main

import (
    "fmt"
)

func main() {
    // for i,v :range slice{}  i对应的是slice的索引,v对应的是slice索引相对应的值这里对v的所有操作都不会影响这个slice
    //这个时候需要用slice[i]来改变v的值
    //for k,v :range map{} 此时k对应的是map中的key,v对应的是map中的value值,此时对k和v的操作都是对值得拷贝的操作,也需要map[k]来修改v的值
    sm := make([]map[int]string, 5) //创建一个长度为5的map型的slice
    for i, _ := range sm {
        sm[i] = make(map[int]string, 1) //初始化sm当中的map
        sm[i][10] = "ok"
        fmt.Println(sm[i])
    }
    fmt.Println(sm)

}
  • 键值对不存在时自动添加,使用delete()删除某键值对
  • 使用for range 对map和slice进行迭代操作
package main

import (
    "fmt"
    "sort"
)

func main() {
    m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
    s := make([]int, len(m))
    i := 0
    for k, _ := range m {
        s[i] = k
        i++
    }
    sort.Ints(s) //对map当中的k进行排序,这就是对map的间接排序
    fmt.Println(s)

}
package main

import (
    "fmt"
)

func main() {
    m1 := map[int]string{1: "a", 2: "b", 3: "c"}
    m2 := make(map[string]int)
    fmt.Println(m2)
    for k, v := range m1 {
        m2[v] = k
    }
    fmt.Println(m2)
}

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

本文来自:博客园

感谢作者:skymyyang

查看原文:Golang map

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

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