美文网首页程序员go学习
Go语言:map使用笔记

Go语言:map使用笔记

作者: linjinhe | 来源:发表于2017-09-03 21:11 被阅读94次

业余时间,尝试写一点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,遍历的顺序是不确定的。

相关文章

  • Golang之Map源码

    引用 深入 Go 的 Map 使用和实现原理 哈希表 深度解密Go语言之map Golang map 的底层实现 使用

  • 10.map

    Go语言基础之map | Golang Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 ...

  • Go语言:map使用笔记

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

  • 第03天(复合类型)_map的基本使用

    24_map的基本使用.go 25_map赋值.go 26_map遍历.go 27_map删除.go 28_map...

  • 第九章:Go语言映射类型map

    1. map概述 Go语言中map字典类型时散列表(hash table)的实现,因为Go语言中将map中的每个键...

  • Go语言——Map分析

    Go语言——Map分析 go\src\runtime\hashmap.go 简介 map就是一个hash表。数据被...

  • go语言学习总结

    1、go语言的map和c++中的map有什么区别? go语言中的map是hash_table,和c++中uno...

  • Go语言:json转map

    使用go语言将json解析到map里,这里主要使用到encoding/json包下的Unmarshal()函数。函...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • go-map源码简单分析(map遍历为什么时随机的)

    GO 中map的底层是如何实现的 首先Go 语言采用的是哈希查找表,并且使用链表解决哈希冲突。 GO的内存模型 先...

网友评论

    本文标题:Go语言:map使用笔记

    本文链接:https://www.haomeiwen.com/subject/zpwjjxtx.html