Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.06.03;
Скачать: CL | DM;

Вниз

сортировка строк в TStringList по убыванию   Найти похожие ветки 

 
Chuck Bass   (2012-01-26 17:30) [0]


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;


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


 
Dimka Maslov ©   (2012-01-26 17:34) [1]

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


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

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

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

или

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


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

Спасибо.


 
Anatoly Podgoretsky ©   (2012-01-26 21:22) [4]

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


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


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


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


 
Anatoly Podgoretsky ©   (2012-01-26 21:32) [6]

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

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


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


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


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


 
Anatoly Podgoretsky ©   (2012-01-26 23:04) [8]

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


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


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


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

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


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

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


 
Anatoly Podgoretsky ©   (2012-01-27 10:07) [11]

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


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


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


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


 
icWasya ©   (2012-01-27 10:12) [13]

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2012.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1327576110
Сергей
2012-01-26 15:08
2012.06.03
проблема с десятичным разделителем в дробях


2-1327834792
Ксения
2012-01-29 14:59
2012.06.03
Вычисление возраста


15-1328127890
Псарь
2012-02-02 00:24
2012.06.03
Constant 0 converted to NIL,


15-1328085629
Faceless
2012-02-01 12:40
2012.06.03
Настройки Delphi7


15-1328172183
Псарь
2012-02-02 12:43
2012.06.03
Asm для новичка.