Сортировать массив со строками и числами - PullRequest
0 голосов
/ 12 января 2019

Я провел несколько часов в поисках библиотеки или способа сделать это:

У меня есть массив [] string {"ex10", "ex2", "ex1"} и после вызова sort.Strings или использования sort.Slice для сравнения с массивом байтов я получаю результат [] string { "ex1", "ex10", "ex2"}

У кого-нибудь есть идеи, как это реализовать?

если кто-то знает, что быстро, я нашел решение здесь

1 Ответ

0 голосов
/ 12 января 2019

Если вы не хотите, чтобы числа сортировались лексикографически, вам нужно отделить их от строк и проанализировать их как целые числа.

В этом примере предполагается, что всегда есть двухбуквенный префикс с допустимым номером, и соответственно разбивает строку: https://play.golang.org/p/LaX-pTr6etc

s := []string{"ex10", "ex2", "ex1"}

sort.Slice(s, func(i, j int) bool {
    if s[i][:2] != s[j][:2] {
        return s[i] < s[j]
    }
    ii, _ := strconv.Atoi(s[i][2:])
    jj, _ := strconv.Atoi(s[j][2:])
    return ii < jj
})
...