3.3 映射

go语言中的映射在其他语言中叫字典或哈希表。正如你想象的:你可以定义一个键和值,然后可以从映射中获取、设置和删除这个值。

和切片一样,映射也是可以通过make创建。让我们看看下面这个例子:

func main() {
    lookup := make(map[string]int)
    lookup["goku"] = 9001
    power, exists := lookup["vegeta"]
    // 打印:0和false
    // 0代表一个整数型的默认值
    fmt.Println(power, exists)
}

使用len可以获得映射中键的个数。使用delete可以删除映射中的一个键值对。

// 返回 1
total := len(lookup)
// 没有返回值, 可以调用一个不存在的键
delete(lookup, "goku")

映射是动态增长的。然后,我们也可以在使用make时传递第二个参数设置映射的初始大小:

lookup := make(map[string]int, 100)

如果你能知道你的映射有多少个键,定义时指定一个初始大小可以获得一定的性能提升。

当你希望将一个映射作为一个结构体的字段时,你可以这样定义:

type Saiyan struct {
    Name    string
    Friends map[string]*Saiyan
}

初始化上面定义的结构体的一种方式:

goku := &Saiyan{
    Name:    "Goku",
    Friends: make(map[string]*Saiyan),
}
goku.Friends["krillin"] = ... //可以创建Krillin

这里还有提供了另外一种方式去定义并初始化一个映射。类似make,这种方式是针对映射和数组。我们可以声明一个复合文字:

lookup := map[string]int{
    "goku":  9001,
    "gohan": 2044,
}

for循环中,使用range关键字也可以遍历一个映射:

for key, value := range lookup {
    ...
}

需要注意的是,编译映射并不是有序的。每次遍历映射时,返回的键值对都是随机的顺序。

链接

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""