映射

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 {
  ...
}

迭代映射是没有顺序的。每次迭代查找将会随机返回键值对。

热门教程

最新教程