前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言:map使用笔记

Go语言:map使用笔记

作者头像
linjinhe
修改2018-06-06 22:54:25
9260
修改2018-06-06 22:54:25
举报
文章被收录于专栏:linjinhe的专栏linjinhe的专栏

业余时间,尝试写一点Go语言的代码,发现细节问题挺多的,备忘一下。

Go 的 map 是 hash map; C++ 的 map 是 tree (主流实现是红黑树); C++ 的 hash map 是unordered_map。

定义和初始化一个map

代码语言:javascript
复制
var m map[string]int
if m == nil {
    fmt.Println("Map m is nil.")
}

a := m["k0"]
fmt.Println(a)        // 输出 0

m["k0"] = 123      // panic

map是一种引用类型,所以上面定义的 m 的值为 nil。 对于读操作,nil map 的行为和 empty map 的行为一样,返回“零值”。 对于写操作,nil map 会 panic。

代码语言:javascript
复制
m := make(map[string]int)
if m != nil {
    fmt.Println("Map m is not nil.")
}

可以使用 make 函数对一个 map 进行初始化:m 现在是一个 empty map。

代码语言:javascript
复制
m := map[string]int{}
if m1 != nil {
    fmt.Println("Map m1 is not nil.")
}

另一种定义并初始化一个 empty map 的方式。

代码语言:javascript
复制
    m := map[string]int{
        "k1": 11,
        "k2": 22,
    }

定义一个 map,并插入两个值。

map的基本操作

代码语言:javascript
复制
i := m["k1"]
fmt.Println(i)

key 存在,返回对应的 value;key 不存在,则返回“零值”。

代码语言:javascript
复制
i, ok := m["k1"]

key 存在,则 ok 为 true,否则为 false。

代码语言:javascript
复制
k_vs := make(map[string][]string)        // k_vs means key-values
k_vs[kv.Key] = append(k_vs[kv.Key], kv.Value)

不需要用多余的代码检查某个key是否存在——当 key 不存在时,k_vs[kv.Key] 返回一个 nil slices,append 一个 nil slices 会自动创建一个 slices。

代码语言:javascript
复制
delete(m, "k1")

key 存在,则删除;key 不存在,则不产生任何作用。

代码语言:javascript
复制
len(m)

返回 map 的长度。

代码语言:javascript
复制
for k, v := range m {
    fmt.Println("Key:", k, "Value:", v)
}

遍历一个 map,遍历的顺序是不确定的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义和初始化一个map
  • map的基本操作
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档