From ac35225945e32e5b500256799e2e4d56c8c700b8 Mon Sep 17 00:00:00 2001 From: devlights Date: Tue, 30 Apr 2024 07:39:18 +0000 Subject: [PATCH] Add examples/basic/cmpop/composite_sort_key.go --- examples/basic/cmpop/README.md | 9 ++--- examples/basic/cmpop/composite_sort_key.go | 41 ++++++++++++++++++++++ examples/basic/cmpop/examples.go | 1 + 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 examples/basic/cmpop/composite_sort_key.go diff --git a/examples/basic/cmpop/README.md b/examples/basic/cmpop/README.md index 83567f85..c7eaf1f2 100644 --- a/examples/basic/cmpop/README.md +++ b/examples/basic/cmpop/README.md @@ -2,7 +2,8 @@ このディレクトリには以下のサンプルがあります。 -| file | example name | note | -| ---------- | ------------- | ---------------------------------------------- | -| or.go | cmpop_or | cmp.Or\[T comparable\]\(\) のサンプルです | -| compare.go | cmpop_compare | cmp.Compare\[T cmp.Orderd\]\(\) のサンプルです | +| file | example name | note | +| --------------------- | ------------------------- | --------------------------------------------------------------------- | +| or.go | cmpop_or | cmp.Or\[T comparable\]\(\) のサンプルです | +| compare.go | cmpop_compare | cmp.Compare\[T cmp.Orderd\]\(\) のサンプルです | +| composite_sort_key.go | cmpop_composite_sort_keys | cmp.Or, cmp.Compareを用いて複合キーのソート処理を実装するサンプルです | diff --git a/examples/basic/cmpop/composite_sort_key.go b/examples/basic/cmpop/composite_sort_key.go new file mode 100644 index 00000000..3b52c3df --- /dev/null +++ b/examples/basic/cmpop/composite_sort_key.go @@ -0,0 +1,41 @@ +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 +} diff --git a/examples/basic/cmpop/examples.go b/examples/basic/cmpop/examples.go index 70c6503c..2f2da51a 100644 --- a/examples/basic/cmpop/examples.go +++ b/examples/basic/cmpop/examples.go @@ -15,4 +15,5 @@ func NewRegister() mapping.Register { func (r *register) Regist(m mapping.ExampleMapping) { m["cmpop_or"] = Or m["cmpop_compare"] = Compare + m["cmpop_composite_sort_keys"] = CompositeSortKeys }