сортировка фрагмента строки: буквы в алфавитном порядке * после* по убыванию чисел

#string #sorting #go #slice

# #строка #сортировка #Вперед #фрагмент

Вопрос:

учитывая:

 alphanumeric := ["aaa","bbb","ccc","111","222","333"]
 

после сортировки:

 ["333","222","111","aaa","bbb","ccc"]
 

пробовал для встроенного пакета сортировки:

 sort.Strings(alphanumeric)
 

это было близко, но числовая часть будет упорядочена по возрастанию

[«111″,»222″,»333″,» aaa», «bbb», «ccc»]

также:

 sort.Slice(alphanumeric, func(i, j int) bool {
    return alphanumeric[i] > alphanumeric[j]
})
 

результат был нежелательным: [«ccc», «bbb», «aaa»,»333″,»222″,»111″]

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

Комментарии:

1. Покажите, что вы пытались решить.

2. @BurakSerdar извините, обновлено.

3. Не указывайте «[РЕШАЕМАЯ]» в названии вашего вопроса; У SO есть механизм для этого, принятые ответы. Если вы решили проблему самостоятельно, вы можете опубликовать ответ на свой вопрос и принять его.

Ответ №1:

https://play.golang.org/p/hS4bo1q2tQl

 sort.Slice(alphanumeric, func(i, j int) bool {
    // check if we have numbers, sort them accordingly 
    if z, err := strconv.Atoi(alphanumeric[i]); err == nil {
        if y, err := strconv.Atoi(alphanumeric[j]); err == nil {
        return y < z
    }
    // if we get only one number, alway say its greater than letter 
    return true
    }
    // compare letters normally 
    return alphanumeric[j] > alphanumeric[i]
})
 

Комментарии:

1. большое спасибо! кстати, я обнаружил, что это может быть ошибкой, если числа представлены в десятичной системе счисления (1.236 / 2.0 и т. Д.) Или обозначают некоторые номера версий (1.0.0.2). обновил сообщение для небольшого мода.