Go语言:map使用笔记

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

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

定义和初始化一个map

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。

m := make(map[string]int)
if m != nil {
    fmt.Println("Map m is not nil.")
}

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

m := map[string]int{}
if m1 != nil {
    fmt.Println("Map m1 is not nil.")
}

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

    m := map[string]int{
        "k1": 11,
        "k2": 22,
    }

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

map的基本操作

i := m["k1"]
fmt.Println(i)

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

i, ok := m["k1"]

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

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。

delete(m, "k1")

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

len(m)

返回 map 的长度。

for k, v := range m {
    fmt.Println("Key:", k, "Value:", v)
}

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏转载gongluck的CSDN博客

结构体字节对齐

      在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量...

42650
来自专栏深度学习思考者

C语言标准工具库函数库:stdlib.h

  对于一些特殊的操作,C语言提供了标准工具库函数库,其中包括可以实现数值转换,内存分配,随机数操作以及字符串转换等函数。本篇博文一一来讲述这个函数库中的那些函...

35680
来自专栏C/C++基础

C++编码格式建议

每个人都可能有自己的代码风格和格式,但如果一个项目中的所有人都遵循同一风格的话,这个项目就能更顺利地进行。每个人未必能同意下述的每一处格式规则,而且其中的不少规...

13720
来自专栏Python小屋

Python使用修饰器强制函数只接收关键参数

前面发过一篇文章介绍了单独一个星号或斜线作为函数参数的含义,请查看:Python函数中单独一个星号或斜线作为形参的含义 如果需要强制函数的所有参数都必须以关键参...

29370
来自专栏北京马哥教育

PEP8 Python 编码规范整理

作者:willhuo 来源:http://lib.csdn.net/article/python/1534 决定开始Python之路了,利用业余时间,争取更深入...

38860
来自专栏技术之路

详解go语言的array和slice 【二】

  上一篇  详解go语言的array和slice 【一】已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是s...

19170
来自专栏Golang语言社区

Golang语言社区--Go语言基础第四节类型

大家好,我是Golang语言社区主编彬哥,这节给大家讲解Go语言中的类型。

45850
来自专栏Pythonista

Golang作用域—坑

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

13230
来自专栏WindCoder

《简明 Python 教程》学习笔记- 基本概念

最近除了忙着论坛那边,就是忙着攻克Python,都好久没来更新了。今天暂且发出一小部分之前自学时做的笔记吧。假期忽然对脚本语言产生了兴趣,最终选择了这个先学着(...

8210
来自专栏Flutter入门

Android OpenGL ES(一)-开始描绘一个平面三角形

今天的目标是做一个OpenGL ES学习的开端。就是画一个简单的三角形。暂时不考虑坐标系的矩阵变换和纹理等。只需要用顶点着色器简单的来进行描述。 这一节需要使...

30020

扫码关注云+社区

领取腾讯云代金券