Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#2

AW: Liste von Records sortieren

  Alt 8. Feb 2024, 16:03
Jupp, sort sorttiert "binär",
aber willst du nach "logischem" Inhalt eines/mehrerer Felder des Records sortieren, dann brauchst du einen Comparer, welcher als Parameter an Sort übergeben wird.

Zitat:
In diesem Fall sind mußt du auch noch casten.
PMyRecord(Item1)^ oder
TMyRecord(Item1^)
[edit]
Wollte grade sagen, dass du besser die generische TList<> verwenden solltest,
aber tutst du ja schon.
Dann schau dir mal an, wie der Sort-Parameter definiert ist.

* ein Interface (IComparer)
* also nun eine Funktion suchen, welche ein IComarer zurückgibt und am Besten eine "Funktion" rein nimmt
* oder selber eine Klasse schreiben, welche IComarer implementiert
* oder eben nach einer fertigen Klasse für das Interface suchen, welche es implementiert (TComparer)
* dafür mußt du dir also eine Instanz erstellen (irgendwas mit "Construct") ... schau einfach mal in die Generics-Units.

[add]
Auf die Schnelle mal etwas für ein TArray<> gefunden, aber ist prinzipiell gleich.
Delphi-Quellcode:
  TArray.Sort<TComponent>(FFormDataSources, TComparer<TComponent>.Construct(function(const Left, Right: TComponent): Integer
    begin
      Result := CompareStr(Left.Name, Right.Name); //Nach Komponentname sortieren
    end));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Feb 2024 um 16:12 Uhr)
  Mit Zitat antworten Zitat