前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >厚土Go学习笔记 | 23. map字典的使用

厚土Go学习笔记 | 23. map字典的使用

作者头像
李海彬
发布2018-03-28 11:43:05
6170
发布2018-03-28 11:43:05
举报
文章被收录于专栏:Golang语言社区

map是一组键和值的组合。在map内是无序的。你可以随时加入或删除一个键及键对应的值。

想查看所有键值,使用range遍历好了。

想找到唯一的键值,那要使用键来得到值。

map的创建必须使用make

代码语言:javascript
复制
m := make(map [string]int)

我们可以把这个map当作是一组人的名字和年龄,然后这样写入键值。

代码语言:javascript
复制
m := make(map [string]int)
m["Anna"] = 16
m["Tom"] = 15
m["Smith"] = 17

直接打印map

代码语言:javascript
复制
fmt.Println(m)

运行结果

代码语言:javascript
复制
map[Anna:16 Tom:15 Smith:17]

如果需要挨个分析处理,那么需要遍历,并且判断后再加上处理语句。比如,我们给值为 17 的加一个特殊的显示标记“* --> ”

代码语言:javascript
复制
//遍历,分别处理
for k, v := range m {
    if v == 17 {fmt.Print("* --> ")}
    fmt.Println(k, v)
}

当然,你也可以直接对你感兴趣的map键调用。

代码语言:javascript
复制
m["Anna"] = 17
fmt.Println(m)

这个时候的打印输出就会发现,Anna的值也是 17 了。

如果,你只是想判断一下,map内是否已经有某个键了,可以这样写

代码语言:javascript
复制
kv, ok := m["anna"]
fmt.Println(kv, ok)
kv1, ok1 := m["Anna"]
fmt.Println(kv1, ok1)

查看输出的结果。比较就会发现,当键不存在时,返回的值为零值,而同时我们得到了一个 false 的检测结果。我们可以使用这个方法来判断map中某个键是否存在。

我们还需要知道,如何删除一个已经存在的元素。很简单的,只要直接 delete就行。像这样

代码语言:javascript
复制
delete(m, "Anna")
fmt.Println(m)

观察打印结果,发现 Anna 已经不见了。

完整代码

代码语言:javascript
复制
package main

import "fmt"

func main() {
    m := make(map [string]int)
    m["Anna"] = 16
    m["Tom"] = 15
    m["Smith"] = 17

    fmt.Println(m)

    //遍历,分别处理
    for k, v := range m {
        if v == 17 {fmt.Print("* --> ")}
        fmt.Println(k, v)
    }

    m["Anna"] = 17
    fmt.Println(m)

    kv, ok := m["anna"]
    fmt.Println(kv, ok)
    kv1, ok1 := m["Anna"]
    fmt.Println(kv1, ok1)

    delete(m, "Anna")
    fmt.Println(m)
}

运行结果

代码语言:javascript
复制
map[Anna:16 Tom:15 Smith:17]
Anna 16
Tom 15
* --> Smith 17
map[Anna:17 Tom:15 Smith:17]
0 false
17 true
map[Tom:15 Smith:17]

下面来展示一个复杂一点的例子。map元素值的类型是一个结构体。

代码语言:javascript
复制
package main

import (
    "fmt"
)

type Vertex struct {
    Lat, Long float64
}

var m map[string]Vertex

func main() {
    m = make(map[string]Vertex)
    m["Bell Labs"] = Vertex{
        40.68433, -74.39967,
    }
    m["Bei Jing"] = Vertex{39.26, 115.25}
    fmt.Println(m)
    fmt.Println("--------I'm just a line.---------------")
    for lat, _ := range m {
        fmt.Println(lat, ":", m[lat].Lat, m[lat].Long)
    }
    delete(m, "Bei Jing")
    fmt.Println(m)
}

运行结果

代码语言:javascript
复制
map[Bell Labs:{40.68433 -74.39967} Bei Jing:{39.26 115.25}]
--------I'm just a line.---------------
Bell Labs : 40.68433 -74.39967
Bei Jing : 39.26 115.25
map[Bell Labs:{40.68433 -74.39967}]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档