![]() |
Sortierung bei TList. Ich wende es an verstehe es aber nicht
Hallo zusammen,
ich habe (gekürzt) folgende Typen
Delphi-Quellcode:
TRecVKUmsatzAusFVArtikel = class private FUnternehmenNr_ID : integer; FJahr_ID : integer; FUmsatz : real; ... public procedure Clear; ... property UnternehmenNr_ID: integer read FUnternehmenNr_ID write FUnternehmenNr_ID; property Jahr_ID: integer read FJahr_ID write FJahr_ID; property Umsatz: real read FUmsatz write FUmsatz; end; TLstVKUmsatzAusFVArtikel = class protected FLst: TObjectList; private function GetRecords(index: integer): TRecVKUmsatzAusFVArtikel; public constructor Create; destructor Destroy; override; ... function Add(iRec: TRecVKUmsatzAusFVArtikel): TRecVKUmsatzAusFVArtikel; ... procedure SortBYUmsatz; property Records[index: integer]: TRecVKUmsatzAusFVArtikel read GetRecords; default; end;
Delphi-Quellcode:
...implementation function CompareByUmsatz(Item1 : Pointer; Item2 : Pointer) : Integer; var Rec1, Rec2: TRecVKUmsatzAusFVArtikel; begin Rec1:= TRecVKUmsatzAusFVArtikel(Item1); Rec2:= TRecVKUmsatzAusFVArtikel(Item2); // Now compare by string if customer1.Umsatz > customer2.Umsatz then Result := 1 else if customer1.Umsatz = customer2.Umsatz then Result := 0 else Result := -1; end;
Delphi-Quellcode:
Ich habe heute zum ersten mal die Methode Sort benutzt welche ich ja von TObjectList erbe. Klappt auch alles super.function TLstVKUmsatzAusFVArtikel.Add(iRec: TRecVKUmsatzAusFVArtikel): TRecVKUmsatzAusFVArtikel; begin FLst.Add(iRec); result := iRec; end; procedure TLstVKUmsatzAusFVArtikel.SortBYUmsatz; begin Flst.Sort(CompareByUmsatz); end; Kurz gegoogelt und dann mit Hilfe von ![]() alles zusammengestöpselt. Aber was mache ich da? Irgendwie stelle ich eine Prozedur! (kein Objekt!) in meiner Unit zur Verfügung welche dann mit FLst.Sort(CompareByUmsatz) genutzt wird? Hä Was? was passiert da? Magie? Zauberei? Ich verstehe rein gar nicht was ich da mache :-( Kann mir das wer erklären? |
Re: Sortierung bei TList. Ich wende es an verstehe es aber n
Ich glaube dein Problem liegt beim Konzept eines Callbacks. Schrei bitte, falls ich mich irre. Ein ganz gute Einführung dazu gibt es
![]() |
Re: Sortierung bei TList. Ich wende es an verstehe es aber n
Hallo,
TList.Sort erwartet von dir, dass du ihm sagst, wie deine Sortierung aussieht. Sort erwartet deshalb eine Funktion, deren Parameter von Sort vorgegeben sind, d.h. Sort geht davon aus, dass die ihm eine Compare wie folgt übergibst function Compare(Item1 : Pointer; Item2 : Pointer) : Integer; Item1 und Item2 müssen Pointer sein, weil TList deine Objekte nicht kennt. Sort benutzt intern jetzt Quicksort und ruft bei jedem Vergleich zweier Objekte deine Methode auf. Wenn du Langeweile hast, kannst du ja auf Basis von Interfaces etwas ähnliches aufbauen. Eine TInterfaceList würde dann nur Objekte speichern, die ein ISortInterface unterstützen und dort könnte man dann die Compare rienpacken. Um jetzt möglichst allgemein zu bleiben und da es damals (Borland Pascal) keine Interfaces gab, blieb nur der Umweg über die Methode. Heiko |
Re: Sortierung bei TList. Ich wende es an verstehe es aber n
Danke an euch beide!
Zitat:
Die Seite ist Gut. Kommt in meine Schatzkiste. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz