在Go中对地图类型进行排序

Go映射的特点之一是字段以随机顺序返回。

如果运行此简单示例:

package main

import ( “fmt” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)
<span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#a6e22e">ages</span>)

}

输出将是

map[b:2 a:1 c:3 d:4]
map[c:3 d:4 b:2 a:1]
map[d:4 b:2 a:1 c:3]

这是有目的的,以避免依赖项的顺序,因为编译器的不同实现可能会使用不同的哈希函数。这是使Go在避免引起无效假设方面非常明确的事情之一。

如果您想通过钥匙订购地图怎么办?

package main

import ( “fmt” “sort” )

func main() { ages := map[string]int{ “a”: 1, “c”: 3, “d”: 4, “b”: 2, }

<span style="color:#a6e22e">names</span> <span style="color:#f92672">:=</span> make([]<span style="color:#66d9ef">string</span>, <span style="color:#ae81ff">0</span>, len(<span style="color:#a6e22e">ages</span>))

<span style="color:#66d9ef">for</span> <span style="color:#a6e22e">name</span> <span style="color:#f92672">:=</span> <span style="color:#66d9ef">range</span> <span style="color:#a6e22e">ages</span> {
	<span style="color:#a6e22e">names</span> = append(<span style="color:#a6e22e">names</span>, <span style="color:#a6e22e">name</span>)
}

<span style="color:#a6e22e">sort</span>.<span style="color:#a6e22e">Strings</span>(<span style="color:#a6e22e">names</span>) <span style="color:#75715e">//sort keys alphabetically

for _, name := range names { fmt.Println(ages[name]) }

}

该程序将按键顺序打印地图的值:

1
2
3
4

更多教程: