Goでのマップタイプの並べ替え

Goマップの特徴の1つは、フィールドがランダムな順序で返されることです。

この簡単な例を実行すると、次のようになります。

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を非常に明確にするものの1つです。

キーで地図を注文したい場合はどうなりますか?

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

その他のチュートリアル: