Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как реализовать сортировку по приоритетам?


Страницы:   1 2

@!!ex ©   (2009-05-19 21:50:00) 

Есть массив структур с полями Name, Map, Id, Locked, TTL.
Нужно сделать сортировку по приоритетам.
Тоесть пользователь кликает на Name, список сортируется по Name, после чего кликает на Locked, список сортируется с учетом Locked, но там где Locked равный сотрируется уже по имени.

Как такое проще всего реализовать? Может есть примеры?


sniknik   (2009-05-20 16:48:00) [1]

> а об подготовке к их выполнению.
не намного медленнее или неудобнее чем заполнение того же массива рекордов. а уж если данные нужно сохранять/загружать так и наоборот намного удобнее/быстрее.

но вообще разговор ни о чем, автор топика уже отказался от этого варианта.


antonn   (2009-05-20 16:20:00) [2]


> так называемые костыли это профессиональные компоненты по
> обработке данных, вряд ли он, или ты (да и вообще, подавляющее
> большинство здесь) напишет быстрее.

речь не о выполняемых ими функциях, а об подготовке к их выполнению.


@!!ex   (2009-05-20 15:31:00) [3]

> [25] DVM ©   (20.05.09 15:14)

Да.


DVM   (2009-05-20 15:14:00) [4]


> @!!ex ©   (20.05.09 15:10) [23]

Я понял что ты сортируешь! Сервера вероятно игровые!


sniknik   (2009-05-20 15:14:00) [5]

> Использование СУБд здесь не актуально и никогда не будет. Нет смысла.
СУБд никто и не предлагал, предлагали компонент для данных... дели мух и котлеты.

но в общем то колхоз дело добровольное.


@!!ex   (2009-05-20 15:10:00) [6]

Господа, вы не о том спорите.
Использование СУБд здесь не актуально и никогда не будет. Нет смысла.
Проигрыш из-за скорости на <100 элементах не актуален, а на 100+ в любом случае архитектуру переделывать, чтобы пользователь не путался.


sniknik   (2009-05-20 15:05:00) [7]

> Достаточно midas.dll или вообще без нее
ага. я предпочитаю ADODataSet.

> то всякие косыли с субд и "сетами" идут лесом.
так называемые костыли это профессиональные компоненты по обработке данных, вряд ли он, или ты (да и вообще, подавляющее большинство здесь) напишет быстрее.

серьезно, уже были желающие "померятся", и мерялись с компонентом написанным здесь товарищем уровня мастера, т.е. очень хорошим и быстрым (он на это и ориентировался) и по большинству параметров он проиграл... нет, собственно сама сортировка у него была очень быстрая, чуть ли не в 2-3раза по числовому полю, но повторная по тому же полу у него занимала то же время, а время датасета за счет построенного в первый раз индекса стремилась к 0, + не было фильтров, и т.д. ну в общем "по очкам" он проиграл.
у вас же, гарантирую, не будет даже одного преимущества.


Вариант   (2009-05-20 14:54:00) [8]


> antonn ©   (20.05.09 14:38) [20]

Я конечно не скажу, что вариант с применением TRxMemoryData будет оптимальным и самым быстродействующим, но тем не менее для сортировки он использует QuickSort, что вовсе не так уже и плохо.


antonn   (2009-05-20 14:38:00) [9]

а если ему нужна максимальное быстродействие в его задаче - то всякие косыли с субд и "сетами" идут лесом.


sniknik   (2009-05-20 14:10:00) [10]

> отличная идея. :) таскать с приложением в 100 килобайт еще и СУБД для массива из 10 записей...
100 килобайт несущественны, СУБД необязательна, 10 записей все и так "на виду" сортировать не нужно.


Вариант   (2009-05-20 14:09:00) [11]


> @!!ex ©   (20.05.09 13:43) [17]


> отличная идея. :) таскать с приложением в 100 килобайт еще
> и СУБД для массива из 10 записей...

Зачем СУБД, есть другие варианты. Достаточно midas.dll или вообще без нее, если подключить RxLib -> TRxMemoryData (или любую другую библиотеку с "отсоединенным" датасетом) к проекту - это если есть желание воспользоваться готовым и не изобретать велосипед.  
PS:Правда  считаю, что время от времени "изобретение велосипедов" необходимо, для понимания тех или иных вещей.


@!!ex   (2009-05-20 13:43:00) [12]


> [15] sniknik ©   (20.05.09 10:45)
> + в том, что там готовые методы по обработке данных, в том
> числе и фильтр с сортировкой, что тут как раз и пытаются
> совместить.

отличная идея. :) таскать с приложением в 100 килобайт еще и СУБД для массива из 10 записей...

> [16] Плохиш ©   (20.05.09 10:59)

Реализация выше, если вы не обратили внимание. Просто не хотелось изобретать велосипед.


Плохиш   (2009-05-20 10:59:00) [13]


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

Я вот, честно, не понял. В чём проблема? В отсутствии программиста?


sniknik   (2009-05-20 10:45:00) [14]

почему нет? ничуть не сложнее чем создать
> массив структур с полями Name, Map, Id, Locked, TTL.
+ в том, что там готовые методы по обработке данных, в том числе и фильтр с сортировкой, что тут как раз и пытаются совместить.


DVM   (2009-05-20 10:42:00) [15]


> Palladin ©

Погоди, щас еще фанатики XML набегут.


Palladin   (2009-05-20 10:40:00) [16]


> sniknik ©   (20.05.09 10:26) [12]

предлагаешь ради сортировки 10 record'ов составом в 4 поля содавать рекордсет? :)


sniknik   (2009-05-20 10:26:00) [17]

да научись уже работать с базами, или частный случай хотя бы с рекордсетом...


@!!ex   (2009-05-20 09:34:00) [18]

еще в пузырьке j:=i, а не j:=0


@!!ex   (2009-05-20 09:33:00) [19]

> [9] Palladin ©   (20.05.09 08:46)

Согласен. Развернутый для прозрачности теста сделал.


Palladin   (2009-05-20 08:46:00) [20]


> function TMainForm.CompareItem(id1,id2:integer):integer;

For i:=0 to Length(Compare_Priority)-1 Do
Begin
 Result:=CompareItemByPriority(Compare_Priority[i],id1,id2);
 If Not Result Then Break;
End;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо