一、元素类型为map的切片
package main
import "fmt"
func main() {
// 元素类型为 map 的切片:
// 先创建切片, 因为后续需要用索引初始化 map, 所以要给长度
a := make([]map[string]int, 2)
// 使用切片的索引对 map 进行创建
a[0] = make(map[string]int, 2)
// 赋值
a[0]["Tom"] = 100
a[0]["Tim"] = 99
fmt.Println(a) // map[]], 这里因为长度为 2, 用零值补齐, 所以会有 map[]
}
输出结果:
[map[Tim:99 Tom:100] map[]]
二、值为切片的map
package main
import "fmt"
func main() {
// 值为切片的 map: map[string][]int, 例: ["语文"][100,99]
// 先创建外层的 map
a := make(map[string][]int, 2)
// 再创建内层的切片
a["语文"] = make([]int, 0, 2)
// 给切片赋值
a["语文"] = append(a["语文"], 100, 99)
a["数学"] = make([]int, 0, 2)
a["数学"] = append(a["数学"], 97, 93)
fmt.Println(a)
}
输出结果:
map[数学:[97 93] 语文:[100 99]]
三、实战
1. 统计字符串中出现的单词次数
package main
import (
"fmt"
"strings"
)
func main() {
s := "how do you do"
// 得到一个切片
words := strings.Split(s, " ")
// 遍历这个切片, 如果字母存在, v+1, 如果字母不存在, 创建
a := make(map[string]int, 10) // 创建一个map 用于接收
// 遍历 words 切片, 把每个单词拿出来
for _, word := range words {
// 在 map 中查找, 如果存在, 计数+1, 如果不存在, 则计数=1
v, ok := a[word]
if ok {
a[word] = v + 1
} else {
a[word] = 1
}
}
fmt.Println(a) // map[do:2 how:1 you:1]
}
输出结果:
map[do:2 how:1 you:1]
2. 统计字符串中出现的字符及其所有位置
package main
import (
"fmt"
)
func main() {
s := "abcab"
//创建一个map,键是字符,值是一个切片
//它存储了每个字符所对应的它在字符串中的所有出现位置的切片
hash := make(map[rune][]int)
for i, j := range s {
if _, ok := hash[j]; ok {
hash[j] = append(hash[j], i)
} else {
//创建切片
hash[j] = make([]int, 0)
hash[j] = append(hash[j], i)
}
}
fmt.Println(hash)
}
输出结果:
map[97:[0 3] 98:[1 4] 99:[2]]
参考链接
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118976.html