前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 开发常用操作技巧--map

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

作者头像
微客鸟窝
发布2023-01-09 19:18:56
1950
发布2023-01-09 19:18:56
举报
文章被收录于专栏:Go语言指北Go语言指北

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
复制
if v, ok := map[key]; ok{
  // 存在
}

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

json 与 map 互转

  1. json 转 map:
代码语言:javascript
复制
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
复制
map[address:beijing name:test]
  1. map 转 json:
代码语言:javascript
复制
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
复制
{"address":"beijing","name":"test"}

map 排序

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

示例:

代码语言:javascript
复制
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 1
1 2
2 3

map 类型的切片

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

示例:

代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 检查一个键是否在 map 中
  • json 与 map 互转
  • map 排序
  • map 类型的切片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档