【Go】map 和 slice 的组合使用

导读:本篇文章讲解 【Go】map 和 slice 的组合使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


一、元素类型为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]]

参考链接

  1. Golang – map和切片混用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118976.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!