mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 22:53:43 +08:00
8.5
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
## 翻译进度
|
## 翻译进度
|
||||||
|
|
||||||
8.4 [map 类型的切片](eBook/08.4.md)
|
8.5 [map 的排序](eBook/08.5.md)
|
||||||
|
|
||||||
## 支持本书
|
## 支持本书
|
||||||
|
|
||||||
|
@@ -1,30 +1,29 @@
|
|||||||
# 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)
|
示例 8.6 [sort_map.go](examples/chapter_8/sort_map.go):
|
||||||
|
|
||||||
// the telephone alphabet:
|
```go
|
||||||
package main
|
// the telephone alphabet:
|
||||||
import (
|
package main
|
||||||
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
|
barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
|
||||||
"delta": 87, "echo": 56, "foxtrot": 12,
|
"delta": 87, "echo": 56, "foxtrot": 12,
|
||||||
"golf": 34, "hotel": 16, "indio": 87,
|
"golf": 34, "hotel": 16, "indio": 87,
|
||||||
"juliet": 65, "kili": 43, "lima": 98}
|
"juliet": 65, "kili": 43, "lima": 98}
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println("unsorted:")
|
fmt.Println("unsorted:")
|
||||||
for k, v := range barVal {
|
for k, v := range barVal {
|
||||||
fmt.Printf("Key: %v, Value: %v / ", k, v)
|
fmt.Printf("Key: %v, Value: %v / ", k, v)
|
||||||
@@ -41,22 +40,27 @@ map默认是无序的,不管是按照key还是按照value默认都不排序(
|
|||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
fmt.Printf("Key: %v, Value: %v / ", k, barVal[k])
|
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 / [fangjun@st01-dstream-0001.st01.baidu.com 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 / [fangjun@st01-dstream-0001.st01.baidu.com go]$ sz -be sort_map.go
|
||||||
|
|
||||||
但是如果你想要一个排序的列表你最好使用结构体slice,这样会更有效:
|
但是如果你想要一个排序的列表你最好使用结构体 slice,这样会更有效:
|
||||||
|
|
||||||
type struct {
|
```go
|
||||||
|
type struct {
|
||||||
key string
|
key string
|
||||||
value int
|
value int
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 链接
|
||||||
|
|
||||||
##链接
|
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
- 上一节:[maps分片](08.4.md)
|
- 上一节:[map 类型的切片](08.4.md)
|
||||||
- 下一节:[倒置map](08.6.md)
|
- 下一节:[将 map 的键值对调](08.6.md)
|
||||||
|
@@ -1,4 +1,7 @@
|
|||||||
#8.6 倒置map
|
# 8.6 将 map 的键值对调
|
||||||
|
|
||||||
|
194
|
||||||
|
|
||||||
这里倒置是指调换key和value。如果map的值类型可以作为key且所有的value是唯一的,那么通过下面的方法可以简单的做到倒置:
|
这里倒置是指调换key和value。如果map的值类型可以作为key且所有的value是唯一的,那么通过下面的方法可以简单的做到倒置:
|
||||||
|
|
||||||
示例 8.7 [invert_map.go](examples/chapter_8/invert_map.go)
|
示例 8.7 [invert_map.go](examples/chapter_8/invert_map.go)
|
||||||
|
@@ -71,6 +71,7 @@
|
|||||||
- 8.3 [for-range 的配套用法](08.3.md)
|
- 8.3 [for-range 的配套用法](08.3.md)
|
||||||
- 8.4 [map 类型的切片](08.4.md)
|
- 8.4 [map 类型的切片](08.4.md)
|
||||||
- 8.5 [map 的排序](08.5.md)
|
- 8.5 [map 的排序](08.5.md)
|
||||||
|
- 8.6 [将 map 的键值对调](08.6.md)
|
||||||
- 第9章:包(package)
|
- 第9章:包(package)
|
||||||
- 第10章:结构(struct)与方法(method)
|
- 第10章:结构(struct)与方法(method)
|
||||||
- 第11章:接口(interface)与反射(reflection)
|
- 第11章:接口(interface)与反射(reflection)
|
||||||
|
Reference in New Issue
Block a user