Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Сортировка строковых значений как чисел


Автор: Medved 15.9.2002, 07:26
Как отсортировать строковые значения (номера домов) по возрастанию, как числовые, причем в номерах домов могут быть как знаки, так и буквы
Например:
25/2, 27 А

Строки сортируются следующим образом:
1
..
11
..
2
..
26
и т.д.

а надо так:
1
2
3
..
11
..
22

Автор: Vit 15.9.2002, 07:33
Добавь нужное количество нулей перед значением чтобы все значения были одинаковой разрядности - это отсортирует цифры, а вот с буквами я бы поступил так - сделал преобразование:


1    -> 001_
3    -> 003_
30  -> 030_
11  -> 011_
22  -> 022_
3а  -> 003a
3б  -> 003б
123 ->123_

Закономерность уловили? - теперь сортировка строк любым алгоритмом отсортирует правильно, затем надо вернуть все изменения взад.

Автор: Song 15.9.2002, 18:13
Загрузи в TStringList, там автомтическая сортировка есть. А вообще полезней самому - "пузырёк". :) (только в магазин сбегать надо) :)

Автор: Vit 15.9.2002, 23:36
Цитата(Song @ 15.9.2002, 02:13)
А вообще полезней самому - "пузырёк". :)

Простой конечно, но очень уж долгий...

Автор: Pegas 16.9.2002, 22:56
Цитата(Song @ 15.9.2002, 11:13)
Загрузи в TStringList, там автомтическая сортировка есть.

Да нет, не получиться, если загрузить в TStringList, то отсортирует по алфавиту, а мне надо, чтобы отсортировала как числа....

Так что пока единственный правильный ответ дал Vit, я его уже реализовал...

Автор: Song 16.9.2002, 23:18
Цитата(Guest @ 16.9.2002, 15:56)
Цитата(Song @ 15.9.2002, 11:13)
Загрузи в TStringList, там автомтическая сортировка есть.

Да нет, не получиться, если загрузить в TStringList, то отсортирует по алфавиту, а мне надо, чтобы отсортировала как числа....

Так что пока единственный правильный ответ дал Vit, я его уже реализовал...

TStringList.CustomSort - и отсортирует как хочешь.

Автор: Vit 17.9.2002, 00:08
Цитата(Song @ 16.9.2002, 07:18)
TStringList.CustomSort - и отсортирует как хочешь.

Это точно!

Автор: Medved 17.9.2002, 06:10
Цитата(Song @ 16.9.2002, 16:18)
TStringList.CustomSort - и отсортирует как хочешь.

Перед Song-ом извиняюсь, попробовал, получилось.... Спасибо!

Автор: Vit 17.9.2002, 06:22
Если не секрет, то какой алгоритм использовал для CustomSort?

Автор: Medved 9.11.2008, 18:52
Цитата(Vit @ 17.9.2002,  09:22)
Если не секрет, то какой алгоритм использовал для CustomSort?

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=60997

Автор: Poseidon 10.11.2008, 15:24
Мдаааа. Medved, лучше поздно, чем никогда?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)