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に変更します。

bannerAds