如何多次循环一个常量顺序的地图?
在我的go代码中,我循环遍历地图两次,但两个循环上的值没有出现在相同的顺序上:
fieldMap := map[string]int{...}
第一循环:
for k, _ := range fieldMap {...}
第二次循环:
for _, v := range fieldMap {...}
答案 0 :(得分:4)
将键保存在第一个循环中并在第二个循环中使用它们:
keys := make([]string, 0, len(m))
for k, v := range m {
fmt.Println(k, v)
keys = append(keys, k)
}
for _, k := range keys {
fmt.Println(k, m[k])
}
答案 1 :(得分:4)
Go确保您不能依赖此博文https://blog.golang.org/go-maps-in-action#TOC_7中所述的地图订单。
当使用范围循环迭代映射时,未指定迭代顺序,并且不保证从一次迭代到下一次迭代是相同的。由于Go 1,运行时随机化地图迭代顺序,因为程序员依赖于先前实现的稳定迭代顺序。如果需要稳定的迭代顺序,则必须维护一个指定该顺序的单独数据结构。
Ainar-G的回答是正确的,但这里有一个变体,同时纳入了这个答案...... https://stackoverflow.com/a/27848197/3536948
keys := make([]string, len(m))
i := 0
for k, _ := range m {
keys[i] = k
i += 1
}
for _, k := range keys {
fmt.Println(m[k])
}