AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Sortierung bei TList. Ich wende es an verstehe es aber nicht

Sortierung bei TList. Ich wende es an verstehe es aber nicht

Ein Thema von GroHae · begonnen am 22. Nov 2007 · letzter Beitrag vom 22. Nov 2007
Antwort Antwort
GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#1

Sortierung bei TList. Ich wende es an verstehe es aber nicht

  Alt 22. Nov 2007, 14:35
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:

function TLstVKUmsatzAusFVArtikel.Add(iRec: TRecVKUmsatzAusFVArtikel): TRecVKUmsatzAusFVArtikel;
begin
  FLst.Add(iRec);
  result := iRec;
end;


procedure TLstVKUmsatzAusFVArtikel.SortBYUmsatz;
begin
 Flst.Sort(CompareByUmsatz);
end;
Ich habe heute zum ersten mal die Methode Sort benutzt welche ich ja von TObjectList erbe. Klappt auch alles super.
Kurz gegoogelt und dann mit Hilfe von http://www.delphibasics.co.uk/RTL.asp?Name=TList
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?
Grüße

Thomas
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Sortierung bei TList. Ich wende es an verstehe es aber n

  Alt 22. Nov 2007, 14:43
Ich glaube dein Problem liegt beim Konzept eines Callbacks. Schrei bitte, falls ich mich irre. Ein ganz gute Einführung dazu gibt es hier.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.714 Beiträge
 
Delphi XE4 Professional
 
#3

Re: Sortierung bei TList. Ich wende es an verstehe es aber n

  Alt 22. Nov 2007, 15:01
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
Heiko
  Mit Zitat antworten Zitat
GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Sortierung bei TList. Ich wende es an verstehe es aber n

  Alt 22. Nov 2007, 15:10
Danke an euch beide!

Zitat von Apollonius:
Ich glaube dein Problem liegt beim Konzept eines Callbacks. Schrei bitte, falls ich mich irre. Ein ganz gute Einführung dazu gibt es hier.
Das triffts.

Die Seite ist Gut. Kommt in meine Schatzkiste.
Grüße

Thomas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf