From 64bb8b3ea3f736ed3ae0765a396d58169bb119d4 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Tue, 24 Feb 2015 00:41:12 -0500 Subject: [PATCH] 8.5 --- README.md | 2 +- eBook/08.5.md | 90 ++++++++++++++++++++++++---------------------- eBook/08.6.md | 7 ++-- eBook/directory.md | 1 + 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 1e75b23..4dd3950 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -8.4 [map 类型的切片](eBook/08.4.md) +8.5 [map 的排序](eBook/08.5.md) ## 支持本书 diff --git a/eBook/08.5.md b/eBook/08.5.md index 784711f..89be6a4 100644 --- a/eBook/08.5.md +++ b/eBook/08.5.md @@ -1,62 +1,66 @@ # 8.5 map 的排序 -192 +map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序(详见第 8.3 节)。 -map默认是无序的,不管是按照key还是按照value默认都不排序(参见8.3节) - -如果你想为map排序,需要将key(或者value)拷贝到一个slice,再对slice排序(使用sort包,参见7.6.6),然后可以使用slice的for-range方法打印出所有的key和value。 +如果你想为 map 排序,需要将 key(或者 value)拷贝到一个 slice,再对 slice 排序(使用 sort 包,详见第 7.6.6 节),然后可以使用 slice 的 for-range 方法打印出所有的 key 和 value。 下面有一个示例: -示例 8.6 [sort_map.go](examples/chapter_8/sort_map.go) +示例 8.6 [sort_map.go](examples/chapter_8/sort_map.go): - // the telephone alphabet: - package main - import ( - "fmt" - "sort" - ) +```go +// the telephone alphabet: +package main +import ( + "fmt" + "sort" +) - var ( - barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23, - "delta": 87, "echo": 56, "foxtrot": 12, - "golf": 34, "hotel": 16, "indio": 87, - "juliet": 65, "kili": 43, "lima": 98} - ) +var ( + barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23, + "delta": 87, "echo": 56, "foxtrot": 12, + "golf": 34, "hotel": 16, "indio": 87, + "juliet": 65, "kili": 43, "lima": 98} +) - func main() { - fmt.Println("unsorted:") - for k, v := range barVal { - fmt.Printf("Key: %v, Value: %v / ", k, v) - } - keys := make([]string, len(barVal)) - i := 0 - for k, _ := range barVal { - keys[i] = k - i++ - } - sort.Strings(keys) - fmt.Println() - fmt.Println("sorted:") - for _, k := range keys { - fmt.Printf("Key: %v, Value: %v / ", k, barVal[k]) - } - } +func main() { + fmt.Println("unsorted:") + for k, v := range barVal { + fmt.Printf("Key: %v, Value: %v / ", k, v) + } + keys := make([]string, len(barVal)) + i := 0 + for k, _ := range barVal { + keys[i] = k + i++ + } + sort.Strings(keys) + fmt.Println() + fmt.Println("sorted:") + for _, k := range keys { + fmt.Printf("Key: %v, Value: %v / ", k, barVal[k]) + } +} +``` 输出结果: + unsorted: Key: bravo, Value: 56 / Key: echo, Value: 56 / Key: indio, Value: 87 / Key: juliet, Value: 65 / Key: alpha, Value: 34 / Key: charlie, Value: 23 / Key: delta, Value: 87 / Key: foxtrot, Value: 12 / Key: golf, Value: 34 / Key: hotel, Value: 16 / Key: kili, Value: 43 / Key: lima, Value: 98 / sorted: Key: alpha, Value: 34 / Key: bravo, Value: 56 / Key: charlie, Value: 23 / Key: delta, Value: 87 / Key: echo, Value: 56 / Key: foxtrot, Value: 12 / Key: golf, Value: 34 / Key: hotel, Value: 16 / Key: indio, Value: 87 / Key: juliet, Value: 65 / Key: kili, Value: 43 / Key: lima, Value: 98 / [fangjun@st01-dstream-0001.st01.baidu.com go]$ sz -be sort_map.go -但是如果你想要一个排序的列表你最好使用结构体slice,这样会更有效: +但是如果你想要一个排序的列表你最好使用结构体 slice,这样会更有效: - type struct { - key string - value int - } +```go +type struct { + key string + value int +} +``` + +## 链接 -##链接 - [目录](directory.md) -- 上一节:[maps分片](08.4.md) -- 下一节:[倒置map](08.6.md) +- 上一节:[map 类型的切片](08.4.md) +- 下一节:[将 map 的键值对调](08.6.md) diff --git a/eBook/08.6.md b/eBook/08.6.md index 3a227d4..2c49683 100644 --- a/eBook/08.6.md +++ b/eBook/08.6.md @@ -1,4 +1,7 @@ -#8.6 倒置map +# 8.6 将 map 的键值对调 + +194 + 这里倒置是指调换key和value。如果map的值类型可以作为key且所有的value是唯一的,那么通过下面的方法可以简单的做到倒置: 示例 8.7 [invert_map.go](examples/chapter_8/invert_map.go) @@ -26,7 +29,7 @@ } fmt.Println() } - + 输出结果: inverted: diff --git a/eBook/directory.md b/eBook/directory.md index 83f58e3..f92afce 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -71,6 +71,7 @@ - 8.3 [for-range 的配套用法](08.3.md) - 8.4 [map 类型的切片](08.4.md) - 8.5 [map 的排序](08.5.md) + - 8.6 [将 map 的键值对调](08.6.md) - 第9章:包(package) - 第10章:结构(struct)与方法(method) - 第11章:接口(interface)与反射(reflection)