関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。
Go 1.22 で、cmp.Or
という関数が追加されていたので、ついでにそれを利用して複合キーでのソート処理が楽に書けるサンプルをメモ書き。
サンプル
package cmpop import ( "cmp" "slices" "github.com/devlights/gomy/output" ) // CompositeSortKeys は、cmp.Or, cmp.Compareを用いて複合キーのソート処理を実装するサンプルです。 func CompositeSortKeys() error { type Person struct { Name string Age uint8 } var ( people = []Person{ {"Aikawa", 21}, {"Tanaka", 22}, {"Kato", 33}, {"Suzuki", 44}, {"Tanaka", 44}, {"Aikawa", 66}, } ) output.Stdoutl("[before]", people) // 名前の昇順が第1キー、年齢の降順が第2キーとする slices.SortFunc(people, func(x, y Person) int { return cmp.Or( cmp.Compare(x.Name, y.Name), -cmp.Compare(x.Age, y.Age), ) }) output.Stdoutl("[after ]", people) return nil }
try-golang/examples/basic/cmpop/composite_sort_key.go at main · devlights/try-golang · GitHub
実行すると以下のようになります。
$ task task: Task "build" is up to date task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: cmpop_composite_sort_key [Name] "cmpop_composite_sort_keys" [before] [{Aikawa 21} {Tanaka 22} {Kato 33} {Suzuki 44} {Tanaka 44} {Aikawa 66}] [after ] [{Aikawa 66} {Aikawa 21} {Kato 33} {Suzuki 44} {Tanaka 44} {Tanaka 22}] [Elapsed] 62.25µs
参考情報
https://pkg.go.dev/cmp#example-Or
https://pkg.go.dev/cmp#example-Or-Sort
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。