我正在尝试使用sort.SliceGo 标准库对一段字符串进行排序。我希望它们按字母顺序排序,除了我希望空字符串出现在所有其他字符串之后(因此我不能只使用sort.Strings)。
对于 less 功能,我认为这会起作用:
func(i, j int) bool {
return s[j] == "" || s[i] < s[j]
}
但是,我似乎根据输入顺序得到随机答案。这是一个 MWE:
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
s := []string{"", "foo", "bar", "baz"}
rand.Seed(time.Now().Unix())
rand.Shuffle(len(s), func(i, j int) {
s[i], s[j] = s[j], s[i]
})
fmt.Printf("%q\n", s)
sort.Slice(s, func(i, j int) bool {
return s[j] == "" || s[i] < s[j]
})
fmt.Printf("%q\n", s)
}
这是运行几次的输出:
$ go run ./z
["" "foo" "baz" "bar"]
["bar" "baz" "foo" ""]
$ go run ./z
["baz" "" "foo" "bar"]
["bar" "" "baz" "foo"]
$ go run ./z
["bar" "foo" "" "baz"]
["" "bar" "baz" "foo"]
$ go run ./z
["bar" "foo" "baz" ""]
["" "bar" "baz" "foo"]
天涯尽头无女友
相关分类