diff options
author | Eli Bendersky <eliben@golang.org> | 2023-05-19 10:10:21 -0700 |
---|---|---|
committer | Eli Bendersky <eliben@google.com> | 2023-05-23 23:33:29 +0000 |
commit | 0df681248862a34ff1233cdc4cf0b036e4761652 (patch) | |
tree | 2b0f8384198d97d23c7d1ee7d28fa9f43ed535f3 /src/sort | |
parent | 6b7aab7750a8b41b15bac4d598470883c245a0d7 (diff) | |
download | go-0df681248862a34ff1233cdc4cf0b036e4761652.tar.gz go-0df681248862a34ff1233cdc4cf0b036e4761652.zip |
slices: add sorting and comparison functions
Now that the `cmp` package exists, sorting and comparison functions from
`x/exp/slices` can be ported to the standard library, using the
`cmp.Ordered` type and the `cmp.Less` and `cmp.Compare` functions.
This move also includes adjustments to the discussions in #60091 w.r.t.
NaN handling and cmp vs. less functions, and adds Min/Max functions.
The final API is taken from
https://github.com/golang/go/issues/60091#issuecomment-1553850782
Updates #60091
Change-Id: Id7e6c88035b60d4ddd0c48dd82add8e8bc4e22d3
Reviewed-on: https://go-review.googlesource.com/c/go/+/496078
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Eli Bendersky <eliben@google.com>
Run-TryBot: Eli Benderskyā€ˇ <eliben@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/sort')
-rw-r--r-- | src/sort/gen_sort_variants.go | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/sort/gen_sort_variants.go b/src/sort/gen_sort_variants.go index d738cac917..2c12b98db3 100644 --- a/src/sort/gen_sort_variants.go +++ b/src/sort/gen_sort_variants.go @@ -77,15 +77,15 @@ func main() { Name: "generic_ordered", Path: "zsortordered.go", Package: "slices", - Imports: "import \"constraints\"\n", + Imports: "import \"cmp\"\n", FuncSuffix: "Ordered", - TypeParam: "[E constraints.Ordered]", + TypeParam: "[E cmp.Ordered]", ExtraParam: "", ExtraArg: "", DataType: "[]E", Funcs: template.FuncMap{ "Less": func(name, i, j string) string { - return fmt.Sprintf("(%s[%s] < %s[%s])", name, i, name, j) + return fmt.Sprintf("cmp.Less(%s[%s], %s[%s])", name, i, name, j) }, "Swap": func(name, i, j string) string { return fmt.Sprintf("%s[%s], %s[%s] = %s[%s], %s[%s]", name, i, name, j, name, j, name, i) @@ -97,14 +97,14 @@ func main() { Name: "generic_func", Path: "zsortanyfunc.go", Package: "slices", - FuncSuffix: "LessFunc", + FuncSuffix: "CmpFunc", TypeParam: "[E any]", - ExtraParam: ", less func(a, b E) bool", - ExtraArg: ", less", + ExtraParam: ", cmp func(a, b E) int", + ExtraArg: ", cmp", DataType: "[]E", Funcs: template.FuncMap{ "Less": func(name, i, j string) string { - return fmt.Sprintf("less(%s[%s], %s[%s])", name, i, name, j) + return fmt.Sprintf("(cmp(%s[%s], %s[%s]) < 0)", name, i, name, j) }, "Swap": func(name, i, j string) string { return fmt.Sprintf("%s[%s], %s[%s] = %s[%s], %s[%s]", name, i, name, j, name, j, name, i) |