golang - 如何排序字符串或[]字节?

lei*_*lin 20 sorting string byte go

某些函数可以对字符串或[]字节进行排序:

"bcad" to "abcd"
or
[]byte("bcad") to []byte("abcd")
Run Code Online (Sandbox Code Playgroud)

字符串只有字母.

如果是字母和数字?

我找到了排序包但不是想要的功能.

谢谢.

def*_*ode 30

为每个角色创建一个字符串对Join他们来说是浪费.

这是一个浪费少一点,但锅炉板更多.游乐场:// XEckr_rpr8

type sortRunes []rune

func (s sortRunes) Less(i, j int) bool {
    return s[i] < s[j]
}

func (s sortRunes) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

func (s sortRunes) Len() int {
    return len(s)
}

func SortString(s string) string {
    r := []rune(s)
    sort.Sort(sortRunes(r))
    return string(r)
}

func main() {
    w1 := "bcad"
    w2 := SortString(w1)

    fmt.Println(w1)
    fmt.Println(w2)
}
Run Code Online (Sandbox Code Playgroud)


Fer*_* Á. 21

您可以将字符串转换为字符串切片,对其进行排序并将其转换回字符串:

package main

import (
    "fmt"
    "sort"
    "strings"
)

func SortString(w string) string {
    s := strings.Split(w, "")
    sort.Strings(s)
    return strings.Join(s, "")
}

func main() {
    w1 := "bcad"
    w2 := SortString(w1)

    fmt.Println(w1)
    fmt.Println(w2)
}
Run Code Online (Sandbox Code Playgroud)

这打印:

bcad
abcd
Run Code Online (Sandbox Code Playgroud)

试试看:http://play.golang.org/p/_6cTBAAZPb


nul*_*lne 14

有一种利用功能的简单方法sort.Slice

package main

import (
    "fmt"
    "sort"
)

func main() {
    s := []rune{'1', 'B', 'C', 'a', 'g', 'M', '9'}
    sort.Slice(s, func(i int, j int) bool { return s[i] < s[j] })
    fmt.Println(string(s))
}

Run Code Online (Sandbox Code Playgroud)

游乐场