![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка строк в 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]);