From d8608c6c237c5a3365977339bc47737f4dda6800 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 22 Feb 2015 04:41:45 -0500 Subject: [PATCH] 8.3 --- README.md | 2 +- eBook/08.3.md | 87 +++++++++++++++++++++++++--------------------- eBook/08.4.md | 9 +++-- eBook/directory.md | 1 + 4 files changed, 56 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index ae5e8b4..a6fa014 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -8.2 [测试键值对是否存在及删除元素](eBook/08.2.md) +8.3 [for-range 的配套用法](eBook/08.3.md) ## 支持本书 diff --git a/eBook/08.3.md b/eBook/08.3.md index 64778dd..e91fc5b 100644 --- a/eBook/08.3.md +++ b/eBook/08.3.md @@ -1,40 +1,46 @@ # 8.3 for-range 的配套用法 -190 +可以使用 for 循环构造 map: -可以使用for循环构造map: +```go +for key, value := range map1 { + ... +} +``` +第一个返回值 key 是 map 中的 key 值,第二个返回值则是该 key 对应的 value 值;这两个都是仅 for 循环内部可见的局部变量。其中第一个返回值key值是一个可选元素。如果你只关心值,可以这么使用: + +```go +for _, value := range map1 { + ... +} +``` + +如果只想获取 key,你可以这么使用: + +```go +for key := range map1 { + fmt.Printf("key is: %d\n", key) +} +``` + +示例 8.5 [maps_forrange.go](examples/chapter_8/maps_forrange.go): + +```go +package main +import "fmt" + +func main() { + map1 := make(map[int]float32) + map1[1] = 1.0 + map1[2] = 2.0 + map1[3] = 3.0 + map1[4] = 4.0 for key, value := range map1 { - ... + fmt.Printf("key is: %d - value is: %f\n", key, value) } - -第一个返回值key是map中的key值,第二个返回值则是该key对应的value值;这两个都是仅for循环内部可见的局部变量。其中第一个返回值key值是一个可选元素。如果你只关心值,可以这么使用 - - for _, value := range map1 { - ... - } - -如果只想获取key,你可以这么使用: - - for key := range map1 { - fmt.Printf("key is: %d\n", key) - } - -示例 8.5 [maps_forrange.go](examples/chapter_8/maps_forrange.go) - - package main - import "fmt" - - func main() { - map1 := make(map[int]float32) - map1[1] = 1.0 - map1[2] = 2.0 - map1[3] = 3.0 - map1[4] = 4.0 - for key, value := range map1 { - fmt.Printf("key is: %d - value is: %f\n", key, value) - } - } +} +``` 输出结果: @@ -47,16 +53,19 @@ 问题 8.1: 下面这段代码的输出是什么? - capitals := map[string] string {"France":"Paris", "Italy":"Rome", "Japan":"Tokyo" } - for key := range capitals { - fmt.Println("Map item: Capital of", key, "is", capitals[key]) - } +```go +capitals := map[string] string {"France":"Paris", "Italy":"Rome", "Japan":"Tokyo" } +for key := range capitals { + fmt.Println("Map item: Capital of", key, "is", capitals[key]) +} +``` -练习 8.1: map_days.go +**练习 8.1** 创建一个map来保存每周7天的名字,将它们打印出来并且测试是否存在tuesday和hollyday。 -##链接 +## 链接 + - [目录](directory.md) -- 上一节:[删除元素](08.2.md) -- 下一节:[maps分片](08.4.md) +- 上一节:[测试键值对是否存在及删除元素](08.2.md) +- 下一节:[map 分片](08.4.md) diff --git a/eBook/08.4.md b/eBook/08.4.md index 59d7126..8243969 100644 --- a/eBook/08.4.md +++ b/eBook/08.4.md @@ -1,11 +1,14 @@ -#8.3 map分片 +# 8.3 map 分片 + +191 + 假设我们想获取一个map的分片,我们必须使用两次make()方法,第一次分配slice,第二次分配slice的每个map元素(参见下面的例子8.3)。 示例 8.3 [maps_forrange.go](examples/chapter_8/maps_forrange.go) package main import "fmt" - + func main() { // Version A: items := make([]map[int]int, 5) @@ -14,7 +17,7 @@ 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 { diff --git a/eBook/directory.md b/eBook/directory.md index 3b8ea06..46e11e7 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -69,6 +69,7 @@ - 8.1 [声明、初始化和 make](08.1.md) - 8.2 [测试键值对是否存在及删除元素](08.2.md) - 8.3 [for-range 的配套用法](08.3.md) + - 8.4 [map 分片](08.4.md) - 第9章:包(package) - 第10章:结构(struct)与方法(method) - 第11章:接口(interface)与反射(reflection)