![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка TList
Макака © (2016-02-28 18:08:00)Есть TList<integer>. TList.Sort сортирует по возрастанию, как сделать наоборот?
DVM (2016-02-29 18:05:00) [1]
> Макака (28.02.16 22:48) [8]
Если бинарный поиск реализован грамотно, то он тоже опирается на функцию сравнения. И ему абсолютно фиолетово, в прямом или обратном порядке отсортирован список.
DVM (2016-02-29 17:39:00) [2]
> Макака (28.02.16 22:48) [8]
> Юрий Зотов, только что из твоего источника нашёл, спасибо!
>
> А бинарный поиск в списке отсортированном по убыванию не
> робит?
А какой практический смысл от списка отсортированного в обратном порядке?
К списку же всегда можно обратиться задом-наперед.
Макака (2016-02-28 22:48:00) [3]Юрий Зотов, только что из твоего источника нашёл, спасибо!
А бинарный поиск в списке отсортированном по убыванию не робит?
Юрий Зотов (2016-02-28 22:48:00) [4]Вот тут все хорошо описано:
http://www.tdelphiblog.com/2009/07/2-generics-delphi-2009-win32-2.html
Юрий Зотов (2016-02-28 22:43:00) [5]Эх, давно я с Delphi дела не имел - но похоже, что все проще: сначала List.Sort. затем List.Reverse.
Юрий Зотов (2016-02-28 22:31:00) [6]http://docwiki.embarcadero.com/CodeExamples/XE8/en/Generics_Collections_TList_%28Delphi%29
Макака (2016-02-28 22:23:00) [7]Я сделал так
function ListSort(Item1, Item2: Pointer): Integer;
begin
if integer(item1)>=integer(item2) then result:=0 else result:=1;
end;
Похоже что одно и тоже.
У меня ошибка выходит "не актуальные параметры" в месте
List.Sort(ListSort);
С этого момента я начал шустрить по инету, но так и не понял из-за чего.
Юрий Зотов (2016-02-28 22:18:00) [8]Используем тот факт, что Integer и Pointer занимают одинаковый размер памяти. То есть, Pointer можно трактовать как Integer, через приведение типа.
function CompareItemsAsInteger(Item1, Item2: Pointer): Integer;
var
i1, i2: Integer;
begin
i1 := Integer(Item1);
i2 := Integer(Item2);
if i1 > i2 then
result := 1
else
if i1 < i2 then
result := -1
else
result := 0
end;
Макака (2016-02-28 19:29:00) [9]var List:TList<integer>;
function ListSort(Item1, Item2: Pointer): Integer;
begin
end;
begin
List:=TList<integer>.Create;
List.Add(1);
List.Add(4);
List.Add(3);
List.Sort(ListSort);
end;
Макака (2016-02-28 19:27:00) [10]DVM, это и ежу понятно. В ТСтрингЛист всё просто было через TCustomSort (как хочешь так и сортируешь) а тут весь инет обрыл, везде в ТЛист объекты хранят не числа, хотя по сути в обоих случаях хранятся указатели на объекты. Короче мне очень сложно пока понять что к чему.
DVM (2016-02-28 19:00:00) [11]Функцию сортировки свою сделать