|
@@ -1,62 +1,66 @@
|
|
|
# 8.5 map 的排序
|
|
# 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)
|
|
|
|
|
-
|
|
|
|
|
- // 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}
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- 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])
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+示例 8.6 [sort_map.go](examples/chapter_8/sort_map.go):
|
|
|
|
|
+
|
|
|
|
|
+```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}
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+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:
|
|
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 /
|
|
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:
|
|
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 / [[email protected] go]$ sz -be sort_map.go
|
|
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 / [[email protected] go]$ sz -be sort_map.go
|
|
|
|
|
|
|
|
-但是如果你想要一个排序的列表你最好使用结构体slice,这样会更有效:
|
|
|
|
|
|
|
+但是如果你想要一个排序的列表你最好使用结构体 slice,这样会更有效:
|
|
|
|
|
|
|
|
- type struct {
|
|
|
|
|
- key string
|
|
|
|
|
- value int
|
|
|
|
|
- }
|
|
|
|
|
|
|
+```go
|
|
|
|
|
+type struct {
|
|
|
|
|
+ key string
|
|
|
|
|
+ value int
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 链接
|
|
|
|
|
|
|
|
-##链接
|
|
|
|
|
- [目录](directory.md)
|
|
- [目录](directory.md)
|
|
|
-- 上一节:[maps分片](08.4.md)
|
|
|
|
|
-- 下一节:[倒置map](08.6.md)
|
|
|
|
|
|
|
+- 上一节:[map 类型的切片](08.4.md)
|
|
|
|
|
+- 下一节:[将 map 的键值对调](08.6.md)
|