Go言語のmapをどのようにソートするか
Go言語では、mapは非順序で、直接ソートすることはできません。ただし、mapのキーと値をスライスに格納してから、スライスをソートすることでmapのソートを実現できます。
以下に、マップのキー順にソートを行う方法を示すコード例を示します。
package main
import (
"fmt"
"sort"
)
func main() {
m := map[string]int{
"apple": 5,
"banana": 2,
"orange": 4,
}
// 创建一个切片存储map的键和值
var keyValuePairs []struct {
Key string
Value int
}
for k, v := range m {
keyValuePairs = append(keyValuePairs, struct {
Key string
Value int
}{Key: k, Value: v})
}
// 对切片按照键进行排序
sort.Slice(keyValuePairs, func(i, j int) bool {
return keyValuePairs[i].Key < keyValuePairs[j].Key
})
// 打印排序后的结果
for _, pair := range keyValuePairs {
fmt.Printf("%s: %d\n", pair.Key, pair.Value)
}
}
無名構造体はmapのキーとバリューの格納に使用されていることに注意してください。Goではスライスは異なる型の要素を格納できないためです。さらに、sort.Slice関数はスライスをソートするために使用されており、その匿名関数はソートのルールを定義しています。
ソートを値で行いたい場合は、匿名関数の比較条件をreturn keyValuePairs[i].Value < keyValuePairs[j].Valueに変更します。