go语言map、实现set

简介: go语言map、实现set

一、map定义、访问、遍历

package map_test
 
import "testing"
 
//map
func TestMap(t *testing.T) {
  //定义并初始化
  m := map[string]int{"one": 1, "two": 2, "three": 3}
  t.Log(m["one"])
  t.Logf("m len=%d", len(m))
  //定义
  m1 := map[string]int{}
  //添加元素
  m1["four"] = 4
  //使用make定义,合理的初始容量,提交性能
  m2 := make(map[string]int, 10)
  t.Log(m, m1, m2)
}
 
//map访问的key不存在是,仍会返回零值,不能通过nil来判断元素是否存在
func TestAccessNotExistingKey(t *testing.T) {
  //创建map
  m1 := map[int]int{}
  t.Log(m1[1])
  m1[2] = 0
  t.Log(m1[2])
  //使用ok判断是否存在
  if _, ok := m1[3]; ok {
    t.Log("key 3 is existing.")
  } else {
    t.Log("key 3 is not existing.")
  }
}
 
//遍历
func TestTravelMap(t *testing.T) {
  m := map[string]int{"one": 1, "two": 2, "three": 3}
  for key, value := range m {
    t.Log(key, value)
  }
}
=== RUN   TestMap
    map_test.go:9: 1
    map_test.go:10: m len=3
    map_test.go:17: map[one:1 three:3 two:2] map[four:4] map[]
--- PASS: TestMap (0.00s)
=== RUN   TestAccessNotExistingKey
    map_test.go:24: 0
    map_test.go:26: 0
    map_test.go:31: key 3 is not existing.
--- PASS: TestAccessNotExistingKey (0.00s)
=== RUN   TestTravelMap
    map_test.go:39: three 3
    map_test.go:39: one 1
    map_test.go:39: two 2
--- PASS: TestTravelMap (0.00s)
PASS

二、map值使用函数

func TestMapWithFunValue(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   TestMapWithFunValue
    map_ext_test.go:11: 2 4 8
--- PASS: TestMapWithFunValue (0.00s)
PASS

三、map实现set

//map实现set
func TestMapForSet(t *testing.T) {
  mySet := map[int]bool{}
  //添加
  mySet[1] = true
  n := 6
  //判断是否存在
  if mySet[n] {
    t.Logf("%d is existing", n)
  } else {
    t.Logf("%d is not existing", n)
  }
  //  输出长度
  t.Log(len(mySet))
  //  删除元素
  delete(mySet, 1)
 
}
=== RUN   TestMapForSet
    map_ext_test.go:24: 6 is not existing
    map_ext_test.go:27: 1
--- PASS: TestMapForSet (0.00s)
PASS
相关文章
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
344 1
|
8月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
566 1
|
5月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
5月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
301 1
|
7月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
436 1
|
8月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
345 1
|
7月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
492 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
333 0
|
7月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
370 0
|
7月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
414 0