go 的map

作者: OOM_Killer | 来源:发表于2019-05-11 19:06 被阅读0次

map声明

首先是map的声明方式。map的普通声明方式很简单。如下所示,需要注意的是make初始化map的时候是不能初始化len的,而后面的数字初始化的时cap。

func Test_InitMap(t *testing.T){
    m := map[string]int{"one":1,"two":2,"three":3}
    m1 := map[string]int{}
    m2 := make(map[string]int,10) // 这个10是cap

    t.Log(m,m1,m2)
    t.Logf("len m2=%d",len(m2))
}

执行 go test -v xx 打印的结果如下。map用make初始化后,长度是0。也就是没有默认map的。

=== RUN   Test_InitMap
--- PASS: Test_InitMap (0.00s)
    map_test.go:10: map[one:1 three:3 two:2] map[] map[]
    map_test.go:11: len m2=0
PASS

map中取不存在的值

对一个初始化后的map,取不存在的key的时候,是不会报错的,反而会返回一个空值,所以想要知道map中检测值存在否需要使用ok-patten的方式来确定

func Test_MapNotExistingKey(t *testing.T){
    m1 := map[int]int{}
    t.Log(m1[2])   // 不存在的就会赋0或空
    m1[2] = 0
    t.Log(m1[2])

    if v,ok := m1[3];ok{
        t.Log("值存在,v为:",v)
    }else{
        t.Log("值不存在")
    }
}

打印的结果为

=== RUN   Test_MapNotExistingKey
--- PASS: Test_MapNotExistingKey (0.00s)
    map_test.go:16: 0
    map_test.go:18: 0
    map_test.go:23: 值不存在
PASS

map的高阶用法-工厂模式

map的value可以是一个方法。如下所示

func Test_MapWithFuncValue(t *testing.T){
    m := map[int]func(op int) int{}

    m[1] = func(op int) int {return op}
    m[2] = func(op int) int {return op*op}
    m[3] = func(op int) int {return op*op*op}
    t.Log(m[1](2),m[2](2),m[3](2))
}

执行结果如下

=== RUN   Test_MapWithFuncValue
--- PASS: Test_MapWithFuncValue (0.00s)
    map_test.go:33: 2 4 8
PASS

map实现set功能

set可以保证元素的唯一性。可以 map[type]bool , 因为map的key是唯一性的,所以可以使用map的这个特性创建set。delete来删除这个值

func Test_MapForSet(t *testing.T) {
    mySet := map[int]bool{}

    n := 1
    mySet[n] = true

    if mySet[n]{
        t.Logf("%d is existing",n)
    } else {
        t.Logf("%d is not existing",n)
    }

    delete(mySet,1)

    if mySet[n]{
        t.Logf("%d is existing",n)
    } else {
        t.Logf("%d is not existing",n)
    }
}

相关文章

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

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

  • Map

    常见操作:http://www.runoob.com/go/go-map.html 创建Map 赋值 遍历Map ...

  • Go语言——Map分析

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

  • Golang之Map源码

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

  • There is no pass-by-reference in

    背景 go map的类型算不算真正意义的引用 go 官方的说明 Map types are reference t...

  • 07. Go极简教程 map的基础使用

    map的声明 map的操作 参考资料:http://go-tour-zh.appspot.com/ Go极简教程 ...

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

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

  • go语言学习总结

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

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • 10.map

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

网友评论

      本文标题:go 的map

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