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

Вниз

Сортировка TList   Найти похожие ветки 

 
Макака   (2016-02-28 18:08) [0]

Есть TList<integer>. TList.Sort сортирует по возрастанию, как сделать наоборот?


 
DVM ©   (2016-02-28 19:00) [1]

Функцию сортировки свою сделать


 
Макака   (2016-02-28 19:27) [2]

DVM, это и ежу понятно. В ТСтрингЛист всё просто было через TCustomSort (как хочешь так и сортируешь) а тут весь инет обрыл, везде в ТЛист объекты хранят не числа, хотя по сути в обоих случаях хранятся указатели на объекты. Короче мне очень сложно пока понять что к чему.


 
Макака   (2016-02-28 19:29) [3]

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 22:18) [4]

Используем тот факт, что 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 22:23) [5]

Я сделал так


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:31) [6]

http://docwiki.embarcadero.com/CodeExamples/XE8/en/Generics_Collections_TList_%28Delphi%29


 
Юрий Зотов ©   (2016-02-28 22:43) [7]

Эх, давно я с Delphi дела не имел - но похоже, что все проще: сначала List.Sort. затем List.Reverse.


 
Макака   (2016-02-28 22:48) [8]

Юрий Зотов, только что из твоего источника нашёл, спасибо!
А бинарный поиск в списке отсортированном по убыванию не робит?


 
Юрий Зотов ©   (2016-02-28 22:48) [9]

Вот тут все хорошо описано:
http://www.tdelphiblog.com/2009/07/2-generics-delphi-2009-win32-2.html


 
DVM ©   (2016-02-29 17:39) [10]


> Макака   (28.02.16 22:48) [8]
> Юрий Зотов, только что из твоего источника нашёл, спасибо!
>  
> А бинарный поиск в списке отсортированном по убыванию не
> робит?

А какой практический смысл от списка отсортированного в обратном порядке?
К списку же всегда можно обратиться задом-наперед.


 
DVM ©   (2016-02-29 18:05) [11]


> Макака   (28.02.16 22:48) [8]

Если бинарный поиск реализован грамотно, то он тоже опирается на функцию сравнения. И ему абсолютно фиолетово, в прямом или обратном порядке отсортирован список.



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

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

Наверх




Память: 0.49 MB
Время: 0.003 c
2-1456757874
Дмитрий
2016-02-29 17:57
2018.03.04
Проблемы со временем


15-1470664634
KSergey
2016-08-08 16:57
2018.03.04
Письменность майя


2-1457082837
guest
2016-03-04 12:13
2018.03.04
TOutlookApplication и задержки в аутлуке...


2-1456753183
gog
2016-02-29 16:39
2018.03.04
Переделать MessageDlg


15-1470691802
Юрий
2016-08-09 00:30
2018.03.04
С днем рождения ! 9 августа 2016 вторник