Files
the-way-to-go_ZH_CN/eBook/08.4.md
Haigang Zhou 30ca13a369 7-8 章修改 (#842)
Co-authored-by: Joe Chen <jc@unknwon.io>
2022-05-10 13:53:30 +08:00

42 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 8.4 map 类型的切片
假设我们想获取一个 `map` 类型的切片,我们必须使用两次 `make()` 函数,第一次分配切片,第二次分配切片中每个 `map` 元素(参见下面的例子 8.4)。
示例 8.4 [maps_forrange2.go](examples/chapter_8/maps_forrange2.go)
```go
package main
import "fmt"
func main() {
// Version A:
items := make([]map[int]int, 5)
for i:= range items {
items[i] = make(map[int]int, 1)
items[i][1] = 2
}
fmt.Printf("Version A: Value of items: %v\n", items)
// Version B: NOT GOOD!
items2 := make([]map[int]int, 5)
for _, item := range items2 {
item = make(map[int]int, 1) // item is only a copy of the slice element.
item[1] = 2 // This 'item' will be lost on the next iteration.
}
fmt.Printf("Version B: Value of items: %v\n", items2)
}
```
输出结果:
Version A: Value of items: [map[1:2] map[1:2] map[1:2] map[1:2] map[1:2]]
Version B: Value of items: [map[] map[] map[] map[] map[]]
需要注意的是,应当像 A 版本那样通过索引使用切片的 `map` 元素。在 B 版本中获得的项只是 `map` 值的一个拷贝而已,所以真正的 `map` 元素没有得到初始化。
## 链接
- [目录](directory.md)
- 上一节:[for-range 的配套用法](08.3.md)
- 下一节:[map 的排序](08.5.md)