【Go】マップの値でソートされたキーを出力する
2023.09.15
2024.03.24
プログラミング
Go
はじめに
Go のマップを値でソートされた順でキーを出力したいと思います。
マップは基本的に要素の順番が意味を持たないときに使い、要素の順番に意味がある場合はスライスを使うのがいいですが、今回はマップの値でソートしてキーを出力する方法を紹介します。
マップを値でソートしてキーを出力
下記がサンプルになります。マップを表す構造体を定義して、その構造体に対して sort の Interface を作成し、ソートして出力しています。
1package main
2
3import (
4 "fmt"
5 "sort"
6)
7
8// マップ用の構造体
9type Pair struct {
10 Key string
11 Value int
12}
13
14type PairList []Pair
15
16// ソート用のInterface
17func (p PairList) Len() int { return len(p) }
18func (p PairList) Less(i, j int) bool { return p[i].Value < p[j].Value }
19func (p PairList) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
20
21func printKeyOrderByValue(targetMap map[string]int) {
22 pl := make(PairList, len(targetMap))
23 i := 0
24 for k, v := range targetMap {
25 pl[i] = Pair{k, v}
26 i++
27 }
28 sort.Sort(pl)
29
30 // 逆順
31 //sort.Sort(sort.Reverse(pl))
32
33 for _, v := range pl {
34 fmt.Printf("%s: %d\n", v.Key, v.Value)
35 }
36}
37
38func main() {
39 targetMap := map[string]int{
40 "five": 5,
41 "nine": 9,
42 "three": 3,
43 "four": 4,
44 "six": 6,
45 "two": 2,
46 "ten": 10,
47 "seven": 7,
48 "one": 1,
49 "eight": 8,
50 }
51
52 printKeyOrderByValue(targetMap)
53}
参考
- sorting - How can I sort a Map[string]int by its values? - Stack Overflow
- sort package - sort - Go Packages
Share
関連記事
【Python】datetimeの基本的な使い方
2021.09.01
seabornで複数のグラフを並べて描画する
2022.07.23
Next.js+MarkdownのブログにTocbotを使って目次を作成する
2024.04.15
【Python】リストと辞書をソートする
2021.09.02