Как сортировать типированный TLIST [дублировать

StackOverflow https://stackoverflow.com/questions/3477584

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть несколько типированных клиентов, которые у меня проблемы с сортировкой

Обычно для нетяпированного 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top