Go 開發常用操作技巧 --map

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 主要是通過下面的方式:

if v, ok := map[key]; ok{
  // 存在
}

ok 爲 true 表示存在, key 對應的值爲 v, 若不需要獲取值則可以用 '_'代替,即:if _, ok := map[key]; ok{}

json 與 map 互轉

  1. json 轉 map:
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)
}

運行結果:

map[address:beijing name:test]
  1. map 轉 json:
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))
}

運行結果:

{"address":"beijing","name":"test"}

map 排序

Go 語言中,map 是無序的,如果需要對 map 進行排序,實現的思路是:將 map 中的 key  複製到一個切片中,然後對此切片進行排序,再遍歷此切片,獲取對應的 key 、value。

示例:

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)
 }
}

運行結果:

123

map 類型的切片

如果要使用一個 map 類型的切片,必須使用兩次 make() 函數,一次分配切片,一個分配切片中的每個 map 元素。

示例:

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)
}

微信公衆號

gophpython

我的微信

wucs_dd

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ekXzgZUiOndqWn8ArEdnaA