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

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

сортировка строк в TStringList по убыванию


Chuck Bass ©   (2012-01-26 17:30:00) 


procedure TForm1.Button2Click(Sender: TObject);

 function Compare(List: TStringList; Index1, Index2: Integer): Integer;
 begin
   Result := ANSICompareText(List[Index1], List[Index2]);
 end;

var
 SL: TStringList;
begin
 SL := TStringList.Create.Create;
 try
   SL.Add('Строка B');
   SL.Add('Строка A');
   SL.Add('Строка C');
   SL.Add('Строка D');
   SL.Add('Строка E');
   SL.CustomSort(@Compare);
   ShowMessage(SL.Text);
 except
   SL.Free;
 end;
end;


как отсортировать по убыванию?


Сергей М.   (2012-01-27 10:15:00) [1]


> icWasya ©   (27.01.12 10:12) [13]
>
> И кстати - функция Compare должна быть свободной функцией


Это с какого же перепугу ?


icWasya   (2012-01-27 10:12:00) [2]

И кстати - функция Compare должна быть свободной функцией - а она у Вас вложенная в Button2Click.


Сергей М.   (2012-01-27 10:11:00) [3]


> в большинстве случаев TStringList не так часто передается
> в качестве параметра функции


Да похрену что туда передается)
Вызываемый код ведь ничего не знает о состоянии упорядоченности строк в передаваемом списке, если это не наследник TStringList..


Anatoly Podgoretsky   (2012-01-27 10:07:00) [4]

И автор так и не ответил на вопрос "Зачем?"
Может он просто хочет распечатать в обратном порядке и найти наибольшее число и ему ничего в голову не пришло, как орсортировать в обратом порядке и взять первое значение, да мало ли чего ему в голову пришло, а предлагать алгоритм не зная задачи как то неправильно.


Anatoly Podgoretsky   (2012-01-27 10:03:00) [5]

Я же написал "В большинстве случаев", твой случай не попадает под это. Это специально придуманый случай, в большинстве случаев TStringList не так часто передается в качестве параметра функции


Сергей М.   (2012-01-27 09:23:00) [6]


> Anatoly Podgoretsky ©   (26.01.12 23:04) [8]


Толя, ну вот что ты из штанов выпрыгиваешь ?)
Есть некий чужой процедурный код - черный ящик -, который вх.параметром ожидает заполненный строками объект-наследник TStrings, полагая что за сортировку строк в списке отвественен вызывающий код, если таковая ему вообще нужна.

Разве это из ряда вон выходящая ситуация ?
И каким боком в такой совершенно обычной ситуации "обратный проход" ?)


Anatoly Podgoretsky   (2012-01-26 23:04:00) [7]

В большинстве случае сортировку можно заменить обратным проходом, это только на пользу производительности.


Сергей М.   (2012-01-26 21:39:00) [8]


> Anatoly Podgoretsky ©   (26.01.12 21:32) [6]


Да дохрена еще чего существует.


Anatoly Podgoretsky   (2012-01-26 21:32:00) [9]

> Сергей М.  (26.01.2012 21:27:05)  [5]

Зачем когда существует цикл downto


Сергей М.   (2012-01-26 21:27:00) [10]


> Anatoly Podgoretsky ©   (26.01.12 21:22) [4]


У тебя "обычно" какое-то необычное)


Anatoly Podgoretsky   (2012-01-26 21:22:00) [11]

Зачем? Обычно это никогда не требуется


Chuck Bass   (2012-01-26 17:39:00) [12]

Спасибо.


Сергей М.   (2012-01-26 17:35:00) [13]

Ты не поверишь - проще пареной репы:

Result := -ANSICompareText(List[Index1], List[Index2]);

или

Result := ANSICompareText(List[Index2], List[Index1]);


Dimka Maslov   (2012-01-26 17:34:00) [14]

переставить местами Index1 и Index2
Result := ANSICompareText(List[Index2], List[Index1]);


Наверх

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