在golang博客中,这是按顺序打印地图的方法。
http://blog.golang.org/go-maps-in-action
import "sort"
var m map[int]string
var keys []int
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Println("Key:", k, "Value:", m[k])
}
但如果我有var m map[string]string
我无法弄清楚如何按顺序打印出字符串(未按照地图容器中字符串创建的顺序排序)
示例是在我的游乐场http://play.golang.org/p/Tt_CyATTA3
正如你所看到的,它不断打印混乱的字符串,所以我尝试将整数值映射到map[string]string
,但我仍然无法弄清楚如何映射map[string]string
的每个元素。
http://play.golang.org/p/WsluZ3o4qd
提前致谢
答案 0 :(得分:2)
好吧,博客提到迭代顺序是随机的:
“...在使用范围循环迭代地图时,未指定迭代顺序,并且不保证从一次迭代到下一次迭代”
解决方案有点微不足道,你有一个单独的切片,按键需要按键排序:
“...如果您需要稳定的迭代订单,则必须维护一个指定该订单的单独数据结构。”
因此,要按预期工作,请使用正确的顺序创建一个额外的切片,然后迭代结果并按此顺序打印。
order := []string{"i", "we", "he", ....}
func String(result map[string]string) string {
for _, v := range order {
if present in result print it,
}
... print all the Non-Defined at the end
return stringValue
}
看到它在这里运行:http://play.golang.org/p/GsDLXjJ0-E