Go 语言 map

引言

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

Map

定义

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type

/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对。

插入

Map [ "France" ] = "Paris"

读取

i := m["France"]

如果 France 存在,就返回那个值,如果不存在,返回0值,也就是说,根据这个value的类型,返回缺省值,比如 string,就返回 “”,int 就返回0。

删除

delete(Map,"France")

如果 France 存在,删除成功,否则什么都没有发生。因为读取在不存在 key 的时候返回 0值,为了区分是否成功,可以采用如下手段

i, ok := m["France"]

遍历

for key, value := range m {
    fmt.Println("Key:", key, "Value:", value)
}

实例

创建和使用map

package main

import "fmt"

func main() {
    var countryCapitalMap map[string]string /*创建集合 */
    countryCapitalMap = make(map[string]string)

    /* map插入key - value对,各个国家对应的首都 */
    countryCapitalMap [ "France" ] = "Paris"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"

    /*使用键输出地图值 */ for country := range countryCapitalMap {
        fmt.Println(country, "首都是", countryCapitalMap [country])
    }
    /*查看元素在集合中是否存在 */
    captial, ok := countryCapitalMap [ "美国" ] /*如果确定是真实的,则存在,否则不存在 */
    /*fmt.Println(captial) */
    /*fmt.Println(ok) */
    if (ok) {
        fmt.Println("美国的首都是", captial)
    } else {
        fmt.Println("美国的首都不存在")
    }
}

json转map

json数据:

{
    "device": "1",
    "data": [
        {
            "humidity": "27",
            "time": "2017-07-03 15:23:12"
        }
    ]
}

代码:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    json_str := "{\"device\": \"1\",\"data\": [{\"humidity\": \"27\",\"time\": \"2017-07-03 15:23:12\"}]}"
    m := make(map[string]interface{})
    // json 反序列化为 map
    err := json.Unmarshal([]byte(json_str), &m)
    fmt.Println(err)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(m["device"])
        data := m["data"]
        if v, ok := data.([]interface{})[0].(map[string]interface{}); ok {
            fmt.Println(ok, v["humidity"], v["time"])
        }
    }
}

参考

http://www.runoob.com/go/go-map.html
https://www.jianshu.com/p/ba7852fbcc80

猜你喜欢

转载自blog.csdn.net/bingfeilongxin/article/details/88194830