跳转至

Go 映射

约 224 个字 41 行代码 预计阅读时间 1 分钟

特点

将键映射到值。

形式

数据类型写法:

1
2
3
map[键的数据类型]值的数据类型
// eg.
var m map[string]Vertex

加上值:

map[键的数据类型]值的数据类型{
    键1: 值1,
    键2: 值2...
}
// eg.
type Vertex struct {
    Lat, Long float64
}
var m = map[string]Vertex{
    "Bell Labs": Vertex{
        40.68433, -74.39967,
    },
    "Google": Vertex{
        37.42202, -122.08408,
    },
}

与结构体类似;

必须有键名。

可使用 make 返回给定类型的映射,并将其初始化备用:

m = make(map[string]Vertex)

零值

nil。没有键,也不能添加键。

通过键访问值

m[]

从映射中读取不存在的键时,返回映射元素类型的零值。

(没看懂)

若顶级类型只是一个类型名,你可以在文法的元素中省略它。

If the top-level type is just a type name, you can omit it from the elements of the literal.

修改

插入 / 修改元素

m[k] = v

获取元素

v = m[k]

从映射中读取不存在的键时,返回映射元素类型的零值。

删除元素

delete(m, k)

检测键是否存在

v, ok = m[k]

若存在,oktrue;否则,okfalsev为映射元素类型的零值。

v, ok未声明,可以用:=

练习

package main
import (
    "golang.org/x/tour/wc"
    "strings"
)
func WordCount(s string) map[string]int {
    ws := strings.Fields(s)
    wcm := make(map[string]int)
    for _, v := range ws {
        wcm[v] += 1
    }
    return wcm
}
func main() {
    wc.Test(WordCount)
}

来源

https://tour.go-zh.org/moretypes/23