一部の関数は文字列または[]バイトをソートできます。
"bcad" to "abcd"
or
[]byte("bcad") to []byte("abcd")
文字列のみの文字列。
文字と数字の場合?
ソートパッケージは見つかりましたが、機能が不足しています。
ありがとう。
Join
だけで各文字の文字列を作成するのは無駄です。
これは少し無駄が少ないものですが、ボイラープレートが多くなっています。 playground:// 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)
}
文字列を文字列のスライスに変換し、並べ替えてから、文字列に戻すことができます。
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)
}
これは印刷します:
bcad
abcd
それを試してください: http://play.golang.org/p/_6cTBAAZPb
関数sort.Slice
を利用する簡単な方法があります。
package main
import (
"fmt"
"sort"
)
func main() {
s := []byte{'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))
}