Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Сортировка двух (!) Listbox-ов

Автор: volvo 20.09.2006 16:31

Привет всем... smile.gif

Что-то глючит меня в последнее время...
Есть такой вопрос: на форме лежат 2 ListBox-а (ну, на самом деле это TTntCheckListBox, но это не имеет никакого значения, ибо Items и у тех и у других - потомок TStrings)... Так вот... В эти 2 компонента одновременно записывается информация. В первый, скажем, имя какого-то класса, во второй - его же ID, то есть, в конце концов получаем 2 заполненных ListBox-а, каждый N-ый элемент которых соответствует друг другу... Теперь сам вопрос: возникла необходимость отсортировать первый ListBox по алфавиту, но нужно пересортировать и второй, так, чтобы опять же элементы с одинаковыми индексами друг другу соответствовали (оба листбокса будут прокручиваться синхронно, и нужно, чтобы ID класса соответствовал расположенному напротов него имени класса)...

Количество элементов в ListBox-ах - порядка сотен, возможно - до нескольких тысяч, так что если просто написать процедуры сортировки по индексам, это будет довольно длительный процесс (по сравнению со встроенными сортировками, в частности)... Может есть какая-то другая возможность?

Автор: Гость 20.09.2006 17:16

Привет!
Попробуй TValueListEditor. (Delphi7)
Там TStrings такого формата: key=value

Автор: volvo 20.09.2006 17:57

Цитата
Попробуй TValueListEditor
Ну, и что мне это даст? Он с каких-то пор умеет работать с Unicode? Нет, а TTntCheckListBox - умеет, и это - обязательное условие для проекта... Так что использование НЕюникодных компонентов отпадает...

Да и встроенных методов сортировки у TValueListEditor нет, нужно делать самому, а написать я и для тех компонентов могу. Вопрос был в основном в скорости обработки...

P.S. Кстати, у меня не D7, а D6...

Автор: Malice 20.09.2006 19:33

Цитата(volvo @ 20.09.2006 13:31) *

по сравнению со встроенными сортировками, в частности

Какими например ?
У меня, кстати, TTntCheckListBox вообще нет sad.gif

Автор: trminator 23.09.2006 1:15

Может быть, элементы второго списка выдернуть временно в TStringList, а у него есть симпатичный метод CustomSort? CustomSort для работы просит пользовательскую функцию сравнения двух элементов. Тогда получится отсортировать его по ключам из первого списка. А второй обычным Sort.


Или наследника этого TTnt... родить специально для второго списка -- всё как у папы кроме одного свойства -- "первый" список, и измененный метод сортировки. Но это ежели исходники есть (а вряд ли... эта TNT поди вся закрытая-платная?)

Автор: volvo 23.09.2006 1:59

trminator, ты о чем это?

Цитата
эта TNT поди вся закрытая-платная?


no1.gif

http://www.tntware.com/delphicontrols/unicode/
Все бесплатно и открыто... С CustomSort попробую...

Автор: Noof 9.10.2006 23:36

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

Автор: volvo 9.10.2006 23:42

Цитата
Количество элементов в ListBox-ах - порядка сотен, возможно - до нескольких тысяч, так что если просто написать процедуры сортировки по индексам, это будет довольно длительный процесс
+ сюда же еще ты предлагаешь добавить временнЫе расходы на добавление элементов в ListBox?

В принципе, вопрос решен... Клиента устраивает такое быстродействие, проект сдан...

Автор: Noof 10.10.2006 4:08

если было много операций над итемами плюс их колво было б не маленьким - то наверно да.