映射(Map)是Go语言中的一种内置数据结构,用于存储键值对的集合,类似于字典或关联数组。
每个键都是唯一的并且必须为数值类型、字符串和指针,而每个键对应一个值。
词频统计
现在我们要对一个文本文件的内容进行词频统计。思路就获取每个单词在文件中出现的次数。这样我们就要构建一个词典,这个词典我们就可以使用map。
// 定义一个词典,key是词、value中是词出现的频次
dic := map[string]int
第二步,我们就要获取词的内容,分词后,判断该词是否在词典中,不在就缓存它,在的话频次增加
cnt, err := os.ReadFile("test.txt")
if err != nil {
log.Fatal(err)
}
// 定义词频统计
dict := make(map[string]int)
// 分词
wordsLength := strings.Fields(string(cnt))
for _, word := range wordsLength {
count, ok := dict[word]
if ok {
dict[word] = count + 1
} else {
dict[word] = 1
}
}
for word, counts := range dict {
fmt.Println(word, counts)
}
输出结果
上面虽然实现了简单的词频统计,但每个单词都用空格自己分好的了。如果我们想要中文语句分词,那就要使用第三方分词库,那就要调用第三方分词包了。
比如常用的jieba、gse、也可以使用nlp相关的机器学习相应的包进行分词。
map的声明及基本用法
声明或定义一个map,进行初始化
var grade map[string]int
grade = map[string]int{"xiaozhu":80,"xiaoli":90}
var grade2 = map[string]int{"xiaozhu":80,"xiaoli":90}
// 声明并初始化一个map,同上面相同
grade3 := map[string]int{"xiaozhu":80,"xiaoli":90}
// 也可以使用make函数
grade4 := make(map[string]int)
map的基本操作:添加键值、删除键、更新键值对、循环查找等
// 创建一个空映射
students := make(map[string]int)
// 添加键值对
students["Alice"] = 90
students["Bob"] = 85
students["Charlie"] = 95
// 更新键值对
students["Alice"] = 92
// 删除键值对
delete(students, "Bob")
// 检测键的存在性
score, ok := students["Charlie"]
if ok {
fmt.Println("Charlie's score:", score)
} else {
fmt.Println("Charlie's score not found")
}
// 遍历映射
for name, score := range students {
fmt.Printf("%s's score: %dn", name, score)
}
通过前文提的闭包和map很容易在代码执行层增加缓存功能
func cache(prefix string) func(y int) int {
mp := make(map[string]int)
return func(y int) int {
key := prefix + ":" + strconv.Itoa(y)
if val, ok := mp[key]; ok {
fmt.Println("来自缓存", key)
return val
}
cal := 200 + y
mp[key] = cal
fmt.Println("为记录缓存")
return cal
}
}
func main() {
c := cache("user")
fmt.Println(c(100))
fmt.Println(c(200))
fmt.Println(c(100))
}
输出内容如下:
其它章节内容:
golang基础06:一场选秀活动,让你彻底掌握数组和切片的用法
golang基础07:什么是函数?函数的如何定义和使用?详细讲解golang函数
原文始发于微信公众号(数据安全治理技术):golang基础08:映射(map)的介绍和使用
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论