#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). обновил сообщение для небольшого мода.