LINUX.ORG.RU

Сортировка строк из цифр, цифр и букв

 ,


0

1

У меня есть список строк, строки эти будут состоять из цифр, цифр и букв, и просто строк из разных символов. Пример: 1, 1а, 1б, 2, 3, 10, а1, а2, вапвапб, ыап, и т.д.

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

Вопрос в том с какой стороны вообще к такому подходят? например, предположу что такое делают с помощью регулярных выражений, выбирают строки нужного формата (только числа или буква с числом), делят на части по необходимости и эти части сортируют? или просто каждый символ строки смотреть и так делить строки как мне надо?

целевой язык у меня C#

какие то готовые решения писать не прошу, только если есть ссылка на какую то статью, язык не особо важен, главное вообще подход, ну и чтобы он не был специфичным, ФП какой нибудь или т.п.

Перемещено JB из talks


Что должно получиться после сортировки набора из 20, 21, 21c, 21a, 1, 1a, 3a, 3b, 3, 10, 10b, 10a?

andreyu ★★★★★
()

Тему не читал, но вангую, что тебе нужен Natural Sort Order.

Суть такова: обычный лексикографический порядок, только последовательность рядом стоящих цифр рассматривается как одна «буква», и такие «буквы» сравниваются между собой уже как числа.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

Так придумываешь общий вид строки, подстроки которой будешь сортировать, разбиваешь её на токены, сортируешь по каждой позиции токена. Например, прототип строки - [число][[буквы]число]. Все подстроки разбиваешь на три группы [число1], [буквы], [число2] и сортируешь по первой, если значения совпадает - по второй, если и тут значения совпадает - по третей группе.

PHPFan
()

Можешь и регекспы юзать, если их производительность не смущает. Я вот регекспами из дампа википедии выбираю что надо, и без некоторых оптимизаций это было бы весьма медленно.

Sadler ★★★
()

Вопрос в том с какой стороны вообще к такому подходят?

Лексикографический порядок © + ABC-сортировка ©.

quickquest ★★★★★
()

Разбиваешь строку на массив, состоящий из буквосочетаний и чисел. Алгоритм может быть любой, если С — то проще пробежаться указателем по символам строки.

Потом сортируешь такие массивы, упорядочивая в лексикографическом порядке (как я понял). Слова в массиве сравниваешь по лексикографическому сравнению, числа — как числа.

Фактически ты берешь шаблон (абстрактный алгоритм) сортировки, со своей функцией сравнения, которая заключается в а) преобразовать строки в массивы как указано выше, б) сравнить массивы, как указано выше.

soomrack ★★★★★
()
Ответ на: комментарий от keinas

20, 21, 21c, 21a, 1, 1a, 3a, 3b, 3, 10, 10b, 10a?

да, это то что мне надо, всем спасибо за ответы

Вам нужно получить несортированный список из несортированного списка? О_о

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

)) это я не то нажал ответить хотел на комментарий ниже Natural Sort Order

keinas
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.