Golang将Map的键值对调的实现示例
作者:头秃猫轻王 发布时间:2024-04-27 15:32:40
标签:Golang,Map,键值
一、Map是什么?
map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型
二、详细代码
1.对调键值
Map原数据:
moMap := map[string]int{
"张三": 21, "李四": 56, "王五": 23,
"赵六": 45, "周七": 32, "陈八": 21,
"许九": 21, "王十": 16, "吴三": 45,
"郑六": 23, "许七": 43, "李三": 16,
}
具体代码如下(示例):
// 键值对调
// 传入参数:moMap map[string]int
// 返回值: map[int][]string
func reserveMap(moMap map[string]int) map[int][]string {
// 建立一个 resMap 与 moMap 容量相同
// 由于对调可能存在多个值对应一个Key
// string 需转为 切片[]string
resMap := make(map[int][]string, len(moMap))
// 通过for range 遍历 moMap
// k 即为 Key v 即为 Value
for k, v := range moMap {
// 由于现在对应为 切片[]string
// 使用 append 达到添加多个的效果
resMap[v] = append(resMap[v], k)
}
// 程序结束
return resMap
}
2.进行调用
详细代码如下(示例):
package main
import (
"fmt"
)
func main() {
moMap := map[string]int{
"张三": 21, "李四": 56, "王五": 23,
"赵六": 45, "周七": 32, "陈八": 21,
"许九": 21, "王十": 16, "吴三": 45,
"郑六": 23, "许七": 43, "李三": 16,
}
// 打印对调前
for k, v := range moMap {
fmt.Printf("Key: %v, Value: %v \n", k, v)
}
resMap := reserveMap(moMap)
fmt.Println("reserve:")
// 打印对调后
for k, v := range resMap {
fmt.Printf("Key: %v, Value: %v \n", k, v)
}
}
// 键值对调
// 传入参数:moMap map[string]int
// 返回值: map[int][]string
func reserveMap(moMap map[string]int) map[int][]string {
// 建立一个 resMap 与 moMap 容量相同
// 由于对调可能存在多个值对应一个Key
// string 需转为 切片[]string
resMap := make(map[int][]string, len(moMap))
// 通过for range 遍历 moMap
// k 即为 Key v 即为 Value
for k, v := range moMap {
// 由于现在对应为 切片[]string
// 使用 append 达到添加多个的效果
resMap[v] = append(resMap[v], k)
}
// 程序结束
return resMap
}
PS:golang 无序的键值对集合map
package main
import "fmt"
func main() {
/*创建集合并初始化 */
countryCapitalMap := make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap [ "France" ] = "巴黎"
countryCapitalMap [ "Italy" ] = "罗马"
countryCapitalMap [ "Japan" ] = "东京"
countryCapitalMap [ "India " ] = "新德里"
/*使用键输出value值 */
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap [country])
}
/*查看元素在集合中是否存在 */
capital, ok := countryCapitalMap [ "American" ] /*如果确定是真实的,则存在,否则不存在 */
/*fmt.Println(capital) */
/*fmt.Println(ok) */
if (ok) {
fmt.Println("American 的首都是", capital)
} else {
fmt.Println("American 的首都不存在")
}
}
来源:https://blog.csdn.net/moer0/article/details/122849308


猜你喜欢
- 昨天群里介绍了一个专门帮你PS图片的网站。吐司网。网站在图片的预览处理上有点意思。当鼠标经过图片,显示为处理过的图片。这样大家能很清晰的对比
- path.makeUrlAbsolute() 把相对URL转化为绝对URLjQuery.mobile.path.makeUrlAbsolut
- 背景一个函数运行需要根据不同项目的配置,动态导入对应的配置文件运行。解决文件结构a #文件夹 │a.py │__init__.pyb #文件
- 编写一个prod()函数,可以接受一个list并利用reduce()求积。from functools import reducedef p
- 需求需要向大约 500 名用户发送带有 Excel 附件的电子邮件,同时必须按用户从主 Excel 文件中拆分数据以创建他们自己的特定文件,
- 本文实例讲述了Python类装饰器。分享给大家供大家参考,具体如下:编写类装饰器类装饰器类似于函数装饰器的概念,但它应用于类,它们可以用于管
- 线性表 线性表是线性结构的抽象,线性结构的特点是结构中的数据元素之间存在一对一的线性关系。 数据元素之间的位置关系是一个接一个的排列: .除
- '====================================='功能:根据ip地址输出地区'参数:ip
- 一、什么是v-bind指令v-bind指令用于响应更新HTML特性,允许将一个或多个属性动态绑定到表达式。v-bind是应用在动态属性上面的
- 本文实例讲述了Python 继承,重写,super()调用父类方法操作。分享给大家供大家参考,具体如下:demo.py(继承,重写,supe
- Web_THBC 为表示层也就是页面(.aspx) BLL_THBC 为业务逻辑层 DAL_THBC 为数据库交互层 (向数据库执行SQL语
- 前言本文将深入研究 preg_replace /e 模式下的代码执行问题,其中包括 preg_replace 函数的执行过程分析、正则表达式
- 在爬取的过程中难免发生ip被封和403错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下怎么用IP代理防止被封首先,设置
- 下面先看下js禁止右击保存图片。禁止鼠标右键保存图片<img src="" oncontextmenu="
- 本文实例讲述了C#创建数据库及导入sql脚本的方法。分享给大家供大家参考,具体如下:C#创建数据库:/// <summary>/
- 使用python批量修改文本文件编码格式把文本文件的编码格式进行批量幻化,比如ascii, gb2312, utf8等,相互转化,字符集的大
- buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统 consistent:下载期间所涉及的数据保持read only,缺省为n d
- 闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的.不过我们也还是从闭包的含义出发。闭包是
- 本文实例讲述了Python pymongo模块用法。分享给大家供大家参考,具体如下:MongoDB优点 MongoDB是一个为当代web应用
- 本文实例讲述了PHP抓取及分析网页的方法。分享给大家供大家参考,具体如下:抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步