![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Добрый день. Есть четыре компонента:
1. Строка, содержит текстовый файл(точнее текстовая часть ХТМЛ-страницы) 2. Строка, содержит несколько слов (слова поиска) 3. Рейтинг(число), результат работы функции function Index(const S1,S2:string; A:integer):integer; 4. Строка - URL из которого получена ХТМЛ-страница По ходу работы программы получается пара "рейтинг - УРЛ", текстовый файл и слова поиска УЖЕ не важны необходимо эти пары (сотни а то и тысячи строк) отсортировать по возрастанию(или убыванию), по значению Рейтинг(число), причем после сортировки Рейтинг тоже уже не нужен. в конечном варианте нужны только строки УРЛ, отсортированные по Рейтингу Вопрос: какими способами можно все это сделать? первое что приходит на ум это TStringList, там есть пары, но сам пока еще пробовал. возможно кто то что то знает, уже? --------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Если в лоб, то просто пишете свой record где описываете все необходимые вам поля. Потом делаете массив этих записей. Потом пишите любую сортировку(на ваш вкус), только при сортировке в качестве критерия выбираете конкретное поле.
-------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| БелАмор |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 7 Всего: 17 |
Вариантов - вагон и маленькая тележка... Не согласен. Я считаю, что следует по максимуму использовать то, что уже имеется. В VCL сортировку умеют делать, в частности, TList, TObjectList, TStringList. Использовать TStringList можно, причём в нескольких вариантах, но, на мой взгляд, в данном случае это неоптимально. Быстрее всего ваши данные уже лежат в каком-то хранилище. Бысрее всего это динамический массив структур (записей). В этом случае можно создать TList и заполнить его указателями на эти структуры. При этом следует иметь в виду, что до окончания работы с указателями массив не должен пересраспределяться, в частности не должен меняться его размер. Далее пишется функция (не метод) сравнения двух структур (одна строчка) и вызывается метод Sort. Всё. в TList находится отсортированный список указателей на ваши структуры. |
|||
|
||||
| Pcrepair |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
вот что получилось в результате, правда пришлось ввести ГлобПерем в качестве буфера. некоторые считают что так неправильно. сразу встречный вопрос - как правильно?
--------------------
Сборник рабочего кода Процедур и Функций DelPhi http://validcoderepo.narod.ru/ |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 4 Всего: 19 |
Правильно, отправить в описание класса формы, в зависимости от необходимой видимости объекта для других классов и наследников в секцию private или public.
А разрушать и создавать, удобно в событиях OnCreate и OnDestroy у формы. Главное чтобы внутри нигде не сделали создание объекта повторно. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| БелАмор |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 10.6.2010 Где: Россия Репутация: 7 Всего: 17 |
Код, мягко говоря, очень далёк от идеального. Если подробно объяснять все недочёты, можно написать целую книгу. Вместо этого я приведу более корректный вариант того, что вы хотели реализовать. Будут вопросы - спрашивайте.
Хотел бы только ещё добавить, что идея хранить рабочие данные в StringList крайне неудачна по нескольким причинам: 1. В реальности у вас данных больше, чем одна строка и одно число. 2. Нестандартное использование указателя для хранения целого числа. Без крайней необходимости такое делать не стоит. Крайней необходимости в данном случае не наблюдается. Все средства следует стараться использовать максимально штатным образом. При нестандартном использовании чего-либо всегда есть вероятность нарваться на неожиданную проблему. Например, на такую: http://delphikingdom.com/asp/viewitem.asp?catalogid=1035 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |