Golang:在地图字符串字符串中进行有序迭代

时间:2013-10-01 22:31:43

标签: string go

在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

提前致谢

1 个答案:

答案 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