#8.5 map排序
map默认是无序的，不管是按照key还是按照value默认都不排序（参见8.3节）

如果你想为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])
    	}
    }

输出结果：
	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，这样会更有效：

	type struct {
		key string
		value int
	}

##链接
- [目录](directory.md)
- 上一节：[maps分片](08.4.md)
- 下一节：[倒置map](08.6.md)
