Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Ersetzen der privaten class procedure QuickSort<T> (. . .) der Klasse TArray

  Alt 29. Feb 2016, 20:00
Wenn du beispielsweise ein Array von Records oder sonstwas sortieren willst kannst du bei TArray.Sort auch einen IComparer<T> angeben. Siehe Doku

Sieht dann, etwas länglich, so aus:

Delphi-Quellcode:
program Project11;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.Generics.Collections, System.Generics.Defaults;

type
   TMyRecord = record
      alsWort:   String;
      alsZahl:   Integer;
   end;

var
   a, b, c:   TMyRecord;
   comparer:   IComparer<TMyRecord>;
   meinArray:   TArray<TMyRecord>;
begin
   a.alsWort := 'Dreiundzwanzsch'; a.alsZahl := 23;
   b.alsWort := 'Nüscht'; b.alsZahl := 0;
   c.alsWort := 'Sievenunfünfzsch'; c.alsZahl := 57;

   comparer := TComparer<TMyRecord>.Construct(
      function(const left, right: TMyRecord): Integer
      begin
         Result := TComparer<Integer>.Default.Compare(left.alsZahl, right.alsZahl);
      end
   );

   SetLength(meinArray, 3); meinArray[0] := a; meinArray[1] := b; meinArray[2] := c;
   // Ab XE7 ginge stattdessen auch das hier:
   //meinArray := [a, b, c];

   TArray.Sort<TMyRecord>(meinArray, comparer);

   WriteLn(meinArray[0].alsWort);
   WriteLn(meinArray[1].alsWort);
   WriteLn(meinArray[2].alsWort);
   ReadLn;
end.
  Mit Zitat antworten Zitat