Go语言学习 _基础04 _Map&Set
Go语言学习 _基础04 _Map&Set
1、map
package map_test
import (
"fmt"
"testing"
)
func TestInitMap(t *testing.T) {
m1 := map[int]int{1: 1, 2: 4, 3: 9} // 初始化方式一 声明 并初始化
t.Log(m1[2])
t.Logf("len m1 = %d", len(m1))
m2 := map[int]int{} // 初始化方式二 声明 不初始化
m2[4] = 16
t.Logf("len m2 = %d", len(m2))
m3 := make(map[int]int, 10) // key-walue : int-int cap = 10
// 初始化方式三 通过 make函数 (map 的 key 和 value 都不是 确定的 大小可能不一 所以 map的 make方法 没有len参数)
t.Logf("len m3 = %d", len(m3))
}
func TestAccessNotExistingkey(t *testing.T) {
m1 := map[int]int{}
t.Log(m1[1])
m1[2] = 0
t.Log(m1[2]) // 对于不存在的 键值 会被 默认输出 0 ,那么这样和 初始化wei0 就很难区分了 吗? Go中 需要进行手动的 区分
m1[3] = 0
isExit(m1, 3)
isExit(m1, 4)
}
// TODO 手动判断 键值 是否存在
func isExit(m map[int]int, k int) {
if v, ok := m[k]; ok {
fmt.Printf("Key %d 's value is %d", k, v)
} else {
fmt.Printf("Key %d is not exiting !", k)
}
}
func TestTravelMap(t *testing.T) {
m1 := map[int]int{1: 1, 2: 4, 3: 9}
for k, v := range m1 { // 通过range遍历 map
t.Log(k, v)
}
}
// 通过 Map 实现 工厂模式 TODO 以后 后面会 加一个 Java 实现的 比较 看看 Go 的简洁
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))
}
2、set
Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在
package set_test
import (
"fmt"
"testing"
)
// TODO Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在
func TestMapForSet(t *testing.T) {
mySet := map[int]bool{}
mySet[1] = true
n := 3
isExiting(mySet, n)
mySet[3] = true
t.Log(len(mySet))
delete(mySet, 1) // 删除 元素
isExiting(mySet, n)
}
func isExiting(set map[int]bool, k int) {
if set[k] {
fmt.Printf("%d is exiting", k)
} else {
fmt.Printf(" %d is not exiting !",k)
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义