Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 开发常用操作技巧--map

Go 开发常用操作技巧--map

作者头像
微客鸟窝
发布于 2023-01-09 11:18:56
发布于 2023-01-09 11:18:56
24400
代码可运行
举报
文章被收录于专栏:Go语言指北Go语言指北
运行总次数:0
代码可运行

map 是一种特殊的数据类型,它是一种元素对的「无序」集合,元素对为 键(key)值(value) 形式。我们可以通过 key 来快速找到与之对应的 value。

map 是引用类型,声明方式: var name map[key_type]value_type,name 为map的变量名,key_type 为键类型,value_type 为键对应的值类型。声明时可以不需要指定 map 的长度,因为 map 是可以动态增长的。未初始化的 map 的值是 nil。

检查一个键是否在 map 中

检查一个 key 在 map 主要是通过下面的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if v, ok := map[key]; ok{
  // 存在
}

ok 为 true 表示存在,key 对应的值为 v,若不需要获取值则可以用 '_'代替,即:if _, ok := map[key]; ok{}

json 与 map 互转

  1. json 转 map:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
 "encoding/json"
 "fmt"
)

func main() {
 jsonStr := `
{
    "name":"test",
    "address":"beijing"
}`
 var mapRes map[string]interface{}
 err := json.Unmarshal([]byte(jsonStr), &mapRes)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(mapRes)
}

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
map[address:beijing name:test]
  1. map 转 json:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
 "encoding/json"
 "fmt"
)

func main() {
 mapRes := map[string]interface{}{
  "name":    "test",
  "address": "beijing",
 }
 jsonStr, err := json.Marshal(mapRes)
 if err != nil {
  fmt.Println(err)
 }
 fmt.Println(string(jsonStr))
}

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"address":"beijing","name":"test"}

map 排序

Go 语言中,map 是无序的,如果需要对 map 进行排序,实现的思路是:将 map 中的 key 复制到一个切片中,然后对此切片进行排序,再遍历此切片,获取对应的 key 、value。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
 "fmt"
 "sort"
)

func main() {
 mapRes := make(map[int]int,5)
 mapRes[0] = 1
 mapRes[1] = 3
 mapRes[2] = 2
 var temp []int
 for _,v := range mapRes{
  temp = append(temp,v)
 }
 sort.Ints(temp)
 for k, v := range temp {
  fmt.Println(k, v)
 }
}

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 1
1 2
2 3

map 类型的切片

如果要使用一个 map 类型的切片,必须使用两次 make() 函数,一次分配切片,一个分配切片中的每个 map 元素。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

func main() {
 sli := make([]map[int]int, 3)
 for i := range sli {
  sli[i] = make(map[int]int, 6)
  sli[i][1] = 1+i
  sli[i][2] = 2+i
 }
 fmt.Printf("value:%v\n", sli)
}

图片及部分相关技术知识点来源于网络搜索,侵权删!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微客鸟窝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大数据分析工具Power BI(三):导入数据操作介绍
进入PowBI,弹出的如下页面也可以直接关闭,在Power BI中想要导入数据需要通过Power Query 编辑器,Power Query 主要用来清洗和整理数据。
Lansonli
2023/03/18
3K0
大数据分析工具Power BI(三):导入数据操作介绍
批量导入并整合pdf数据做分析,用Power BI小意思啦!
小勤:我们每天都能收到供应商推送的pdf格式的燃油价格文件,怎么能方便地整合到一起做数据分析啊?
大海Power
2021/08/30
2.8K0
汇总Excel数据,列名不一样怎么办?| Power Query实战
日常工作中,很多朋友遇到类似如下的问题——多个要汇总的Excel工作表,列名却存在一些差异,比如有的表里叫“日期”,而另一个表里可能是“采购日期”……
大海Power
2023/02/06
2.5K0
Excel批量导入文本文件,再也不用VBA
小勤:大海,现在有个很烦的事情,数据都是每个月一个文本文件,好难分析,有什么方法能批量汇总的吗?
大海Power
2021/08/30
1.5K0
Excel表数据汇总又双叒叕粗错,$FilterDatabase是什么鬼?
小勤:你教我用Power Query导入Excel文件的方法还是有问题啊,导进来的数据翻倍了!!!
大海Power
2021/08/30
2.6K0
批量汇总文件数据,有多种文件类型怎么办?
大海:这个问题解决的思路很简单,Power Query里针对不同的格式有不同的解析函数。比如csv,可以用Csv.Document去解析,Excel则用Excel.Workbook去解析……
大海Power
2021/08/30
8760
Power Query(BI)里能一键合并所有Excel工作簿?还是别用了吧!
小勤:这是神马情况啊?“[Expression.Error] 该键与表中的任何行均不匹配”。合并文件时不时就跳这个错!
大海Power
2021/08/30
3.7K0
Excel Power Query的数据处理过程
大海:好的。假设我们要用PQ完成一项任务,比如前面的每一个独立例子:二维表转一维表、分离金额、提取字符串、批量导入文本文件、修整文本内容等等,你仔细看一下,其实从大的层面上,都是3个步骤:数据选取(新建查询)→数据处理(清洗转换)→数据上传(加载)。这是每项任务都要做的事情。具体如下图所示:
大海Power
2021/08/30
6980
PQ-批量汇总多Excel表格:标题都从第n行起怎么办?
标准Excel表格批量汇总过程及基础方法请参考文章:《PQ批量汇总Excel文件就是这么简单》,所有特殊情况处理都是在该基础方法之上加以适当的处理而已。
大海Power
2021/08/30
9200
批量汇总JSON文件数据?超级轻松!
目前JSON已成为当前互联网及各类业务系统的主要数据交换方式之一,且随着新一代软件平台“微服务”架构的流行,JSON格式数据将会更多地出现在不同的业务平台中。 另一个更加具体的应用是,在Power BI中自定义不同的颜色主题时,就是将系列颜色编码编制成一个JSON文件,然后导入到Power BI中——多了解一些关于JSON文件的知识,没准很快就在哪个地方碰到用上了。
大海Power
2021/08/31
8450
PQ批量汇总多Excel表格之特殊处理:标题不在第1行
小勤:我有一批从某个系统导出来的表,主体数据表格式完全一样,但标题行在第2行(第1行通常是空的),为什么通过Power Query合并时,有的会忽略掉第1行空行,有的又不会忽略掉?
大海Power
2021/08/30
1.8K0
Power Query批量导入文件
在power query中使用如下代码,可以批量导入格式相同的文件,把文件放到文件夹即可
披头
2020/11/10
2.5K0
pdf里的表格数据也能轻松汇总了!
小勤:我们每天都能收到供应商推送的pdf格式的燃油价格文件,怎么能方便地整合到一起做数据分析啊?
大海Power
2021/08/31
2.3K0
PowerQuery套路01:批量导入文件
日常工作中有时会遇到批量导入文件的场景,比如:excel,csv,json,手工合并是一种比较简单的方法,就是效率太低,PowerQuery最适合做这种事了,PowerQuery默认就有导入文件夹的选择,可以轻松实现批量导入。(格式要一致)
披头
2020/06/03
3.8K0
Power Query批量汇总JSON文件数据
大海:会单个的就应该会批量的啊。仔细观察一下你导入单个文件的,里面其实就是用Json.Document函数对文本文件进行解析(详见文章《PQ-数据获取:文本文件中的JSON数据提取》)
大海Power
2021/08/30
1.3K0
Power Query 系列 (01) - Power Query 介绍
Power Query 是微软提供的工具,Excel 2013 版作为插件加载使用,从 Office 2016 版开始,Power Query 的功能集成到 Excel 中,可以直接使用。微软推出 Power BI Desktop 后,一系列的工具,比如 Power Query, Power Pivot, Power View 等,都集成在其中。Power Query 定位查询,中文一般翻译为超级查询,主要作用是连接不同种类的数据源,进行数据的转换。下图来自微软官方对 Power Query 的介绍,可以帮助理解。Power Query 主要实现连接和转换功能。
StoneWM
2019/08/30
6.2K0
厉害了,word哥,用PQ将word简历表格数据批量汇总到Excel,这实在是666666
小勤:大海,公司汇总了所有应聘者的简历,但都是分散的word文件,一个人一份,有没有办法将其中的姓名、性别、手机和邮箱等信息汇总到Excel里啊?
大海Power
2021/08/30
1.4K0
.Net之Nopi Excel数据导出和批量导入功能
  它是一个专门用于读写Microsoft Office二进制和OOXML文件格式的.NET库,我们使用它能够轻松的实现对应数据的导入,导出功能,并且还能通过其对应的属性对Excel进行对应的样式调整。是一个简洁而又强大的第三方库。
追逐时光者
2019/08/28
1.9K0
.Net之Nopi Excel数据导出和批量导入功能
批量导入Excel文件,为什么我导入的数据重复了?
这里,显然是因为将合并工作表和数据源放在了同一个文件夹下,所以Power Query将合并工作表也显示了出来,并且,还有一个前面带“~$”的合并工作表,是因为合并工作表当前打开状态,生成了一个临时文件。所以在后续编辑查询的时候我们首先要把合并工作表的内容过滤掉,否则以后刷新数据时会连合并工作表的数据一起导入。
大海Power
2021/08/30
3.7K0
多Excel文件数据汇总,列名大小写不一致咋办!!!
大海:多个Excel工作簿内容汇总用Power Query不是很简单的事情吗?前面我不仅推送了大量文章《用PQ自动汇总各种文件数据,这一系列我又都给你整理好了!》,另外,还专门发布了一个关于数据汇总的视频合集《【免费系列视频】Excel数据汇总特辑 | 多个案例,多种情况,举一反三!》
大海Power
2021/08/31
7430
推荐阅读
相关推荐
大数据分析工具Power BI(三):导入数据操作介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验