Я добавил ответ на этот вопрос здесь: Сортировка List<String>
в C # , которая требует естественного порядка сортировки, который обрабатывает вложенные числа.
Моя реализация, однако, наивна, и вместо всех постов о том, как приложения не обрабатывают Unicode правильно, предполагая что-то (Турция проверяет кого-нибудь?), Я подумал, что я бы попросил помочь написать лучшее реализация. Или, если есть встроенный метод .NET, скажите, пожалуйста:)
Моя реализация ответа на этот вопрос просто проходит по строкам, сравнивая символ за символом, пока не встретит цифру в обоих. Затем он извлекает последовательные цифры из обеих строк, что может привести к изменению длины, дополняет самые короткие начальные нули, а затем сравнивает.
Однако с этим есть проблемы.
Например, что если у вас в строке x есть две кодовые точки, которые вместе составляют символ È, но в другой строке у вас есть только одна кодовая точка, та, которая является этим символом.
Мой алгоритм не сработает, поскольку он будет обрабатывать диакритическую кодовую точку как один символ и сравнивать ее с È из другой строки.
Может кто-нибудь подсказать мне, как правильно с этим справиться? Мне нужна поддержка для указания объекта CultureInfo
для решения языковых проблем, таких как сравнение «ss» с «ß» в Германии и тому подобное.
Я думаю, мне нужно, чтобы мой код перечислял по «реальным символам» (я не знаю здесь настоящего термина) вместо отдельных кодовых точек.
Какой правильный подход к этому?
Кроме того, если «естественный» означает «то, как люди ожидают, что он будет работать», я бы добавил следующие соображения:
- А как насчет дат и времени?
- А как насчет значений с плавающей запятой?
- Существуют ли другие последовательности, которые считаются "естественными"?
- Как далеко это должно быть растянуто? (Эни, мини, мин, мо)