0

Golang - как отсортировать строку или []byte?

169

Я ищу функцию, которая может сортировать string или []byte:

"bcad" должен становиться "abcd"
или
[]byte("bcad") должен становиться []byte("abcd")

Строка содержит только буквы, но сортировка также должна работать для букв и чисел.

Я нашел пакет sort, но не нашел нужной функции.

3 ответ(ов)

0

Вы можете преобразовать строку в срез строк, состоящих из одиночных символов, отсортировать его, а затем снова преобразовать в строку:

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

0

В Golang действительно нет удобной функции для сортировки строк. Однако, вы можете реализовать сортировку строк разными способами. Вот два подхода:

  1. Сортировка с использованием целых чисел

Этот метод требует преобразования символов в целые числа, что может показаться лишним, так как мы в конечном итоге снова конвертируем их обратно в строки. Вот пример:

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)
}

Этот метод не идеален, так как включает в себя много преобразований типов.

  1. Реализация интерфейса сортировки для среза 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.

0

Вы можете отсортировать массив строк в 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, чтобы отсортировать массив, и снова выводим его на экран.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь