浏览 44
更新于 2020-08-23 08:35
映射
Go语言中的映射,就好比其他语言中的hash表或者字典。它们的工作方式就是:定义键和值,并且可以获取,设置和删除其中的值。
映射和切片一样,使用 make
方法来创建。让我们来看看一个例子:
func main() {
lookup := make(map[string]int)
lookup["goku"] = 9001
power, exists := lookup["vegeta"]
// prints 0, false
// 0 is the default value for an integer
fmt.Println(power, exists)
}
我们使用 len
方法类获取映射的键的数量。使用delete
方法来删除一个键对应的值:
// returns 1
total := len(lookup)
// has no return, can be called on a non-existing key
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
Go 还有一种定义和初始化值的方式。像 make
,这种特定用于映射和数组。我们可以定义为复合方式:
lookup := map[string]int{
"goku": 9001,
"gohan": 2044,
}
我们可以使用 for
组合 range
关键字迭代映射:
for key, value := range lookup {
...
}
迭代映射是没有顺序的。每次迭代查找将会随机返回键值对。