3

在 Go 博客中,这是按顺序打印地图的方法。

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_CyATTA3map[string]string中,它不断打印混乱的字符串,所以我尝试将整数值映射到,但我仍然无法弄清楚如何映射每个元素的map[string]string

http://play.golang.org/p/WsluZ3o4qd

4

1 回答 1

3

好吧,博客提到迭代顺序是随机的:

“...在使用范围循环遍历地图时,未指定迭代顺序,并且不保证从一次迭代到下一次迭代顺序相同”

解决方案有点简单,您有一个单独的切片,其中包含您需要的键排序:

“...如果您需要稳定的迭代顺序,则必须维护一个单独的数据结构来指定该顺序。”

因此,要按预期工作,请创建一个具有正确顺序的额外切片,然后迭代结果并按该顺序打印。

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

于 2013-10-01T23:58:09.713 回答