Как сортировать типированный TLIST [дублировать
Вопрос
Этот вопрос уже имеет ответ здесь:
У меня есть несколько типированных клиентов, которые у меня проблемы с сортировкой
Обычно для нетяпированного TLIS, у меня будет такая функция, как:
function SortByJob(Item1: Pointer; Item2: Pointer): Integer;
var
p1, p2: JobPointer;
begin
p1 := JobPointer(Item1);
p2 := JobPointer(Item2);
if p1.job > p2.job then
Result := 1
else
if p1.job = p2.job then
Result := 0
else
Result := -1
end;
Который будет называться списком
JobList.Sort(SortByJob)
Однако я решил в своем нынешнем приложении, что мы хотим заблокировать TLists к определенным типам указателя, поэтому в приведенном выше примере мы бы заявили, как:
JobList: array[0..4] of TList<JobsPointer>;
Теперь, когда я звоню
JobList[0].Sort(SortByJob)
Я получаю ошибку «недостаточно параметров».
Есть идеи?
Я сравнил, что если я использую функцию сортировки выше на нетяпированном «стандартном» TLIST, то он будет компитенным правильно ...
Решение
Общий список отсортирован с использованием экземпляра Imparer. Вот пример, который сортирует список целых чисел:
uses Generics.Collections, Generics.Defaults;
procedure TForm1.FormCreate(Sender: TObject);
var
L : TList<integer>;
begin
L := TList<integer>.Create;
L.Add(2);
L.Add(1);
L.Sort(TComparer<integer>.Construct(
function (const L, R: integer): integer
begin
Result := L - R;
end
)) ;
L.Free;
end;
Не связан с StackOverflow