Golang - как отсортировать строку или []byte?
Я ищу функцию, которая может сортировать string
или []byte
:
"bcad" должен становиться "abcd"
или
[]byte("bcad") должен становиться []byte("abcd")
Строка содержит только буквы, но сортировка также должна работать для букв и чисел.
Я нашел пакет sort, но не нашел нужной функции.
3 ответ(ов)
Вы можете преобразовать строку в срез строк, состоящих из одиночных символов, отсортировать его, а затем снова преобразовать в строку:
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
Попробуйте здесь: https://play.golang.org/p/_6cTBAAZPb
В Golang действительно нет удобной функции для сортировки строк. Однако, вы можете реализовать сортировку строк разными способами. Вот два подхода:
- Сортировка с использованием целых чисел
Этот метод требует преобразования символов в целые числа, что может показаться лишним, так как мы в конечном итоге снова конвертируем их обратно в строки. Вот пример:
func sortByInt(s string) string {
var si = []int{}
var sr = []rune{}
for _, r := range s {
si = append(si, int(r))
}
sort.Ints(si)
for _, r := range si {
sr = append(sr, rune(r))
}
return string(sr)
}
Этот метод не идеален, так как включает в себя много преобразований типов.
- Реализация интерфейса сортировки для среза rune
Лучший способ — это реализовать сортировку напрямую для среза rune
, что делает код более чистым. Обратите внимание, что rune
– это тип int32
, а byte
– это uint8
. Вот пример:
func sortBySlice(s string) []rune {
sr := []rune(s)
sort.Slice(sr, func(i int, j int) bool {
return sr[i] < sr[j]
})
return sr
}
Этот способ более эффективен и прямо работает с символами в строке, не требуя лишних преобразований. Вы можете использовать этот метод для сортировки символов в строках в Go.
Вы можете отсортировать массив строк в Go следующим образом:
// имя файла - main.go
package main
import (
"fmt"
"sort"
)
/*
* Эта функция используется для сортировки массива строк
*/
func main() {
var names = []string{"b", "e", "a", "d", "g", "c", "f"}
fmt.Println("Исходный массив строк: ", names)
sort.Strings(names)
fmt.Println("После сортировки массива строк: ", names)
return
}
В этом коде мы создаем массив строк, выводим его на экран, затем используем встроенную функцию sort.Strings
, чтобы отсортировать массив, и снова выводим его на экран.
Как эффективно объединять строки в Go
Как написать многострочные строки в Go?
"TypeError: требуется объект, похожий на bytes, а не 'str' при обработке содержимого файла в Python 3"
Как преобразовать int в строку в Go?
Отформатировать строку в Go без вывода?