golang中map每次输出时顺序都不一致,在某些情况下甚至需要按顺序输出map。那么如何做到顺序输出呢?
- map每次输出结果都不一致
package main
import (
"fmt"
"sort"
)
func main() {
mp := make(map[string]string)
mp["beijing"] = "beijing"
mp["tianjin"] = "tianjin"
mp["shanghai"] = "shanghai"
mp["chongqing"] = "chongqing"
mp["guangdong"] = "guangzhou"
mp["jiangsu"] = "nanjing"
mp["zhejiang"] = "hanzhou"
for key, value := range mp {
fmt.Println(key, " ----> ", value)
}
fmt.Println("second output")
for key, value := range mp {
fmt.Println(key, " ----> ", value)
}
}
两次输出打印结果不一致,如下输出结果为:
chongqing ----> chongqing
guangdong ----> guangzhou
jiangsu ----> nanjing
zhejiang ----> hanzhou
beijing ----> beijing
tianjin ----> tianjin
shanghai ----> shanghai
second output
chongqing ----> chongqing
guangdong ----> guangzhou
jiangsu ----> nanjing
zhejiang ----> hanzhou
beijing ----> beijing
tianjin ----> tianjin
shanghai ----> shanghai
- 顺序输出map
实现顺序输出map,首先需要获取map中所有key,然后将key排序,最后按排序后key输出map。
package main
import (
"fmt"
"sort"
)
func main() {
mp := make(map[string]string)
mp["beijing"] = "beijing"
mp["tianjin"] = "tianjin"
mp["shanghai"] = "shanghai"
mp["chongqing"] = "chongqing"
mp["guangdong"] = "guangzhou"
mp["jiangsu"] = "nanjing"
mp["zhejiang"] = "hanzhou"
for key, value := range mp {
fmt.Println(key, " ----> ", value)
}
fmt.Println("second output")
for key, value := range mp {
fmt.Println(key, " ----> ", value)
}
fmt.Println("sort output")
keys := []string{}
for key, _ := range mp {
keys = append(keys, key)
}
sort.Strings(keys)
for _, key := range keys {
fmt.Println(key, " ----> ", mp[key])
}
return
}
排序后输出结果为按key排序结果
chongqing ----> chongqing
guangdong ----> guangzhou
jiangsu ----> nanjing
zhejiang ----> hanzhou
beijing ----> beijing
tianjin ----> tianjin
shanghai ----> shanghai
second output
chongqing ----> chongqing
guangdong ----> guangzhou
jiangsu ----> nanjing
zhejiang ----> hanzhou
beijing ----> beijing
tianjin ----> tianjin
shanghai ----> shanghai
sort output
beijing ----> beijing
chongqing ----> chongqing
guangdong ----> guangzhou
jiangsu ----> nanjing
shanghai ----> shanghai
tianjin ----> tianjin
zhejiang ----> hanzhou