Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TList sortieren (https://www.delphipraxis.net/22089-tlist-sortieren.html)

crossmaen 12. Mai 2004 10:26


TList sortieren
 
Hallo!

Ich hab zwar schon in der DH nachgeschaut, kam da aber nicht weiter. Ich weiß zumindest schon soviel, dass es eine Methode von TList gibt (sort). Aber wie rufe ich die auf?

MyList.Sort(--->was kommt hier rein???<---);

Meine Liste sieht so aus:

MYlist: TList;

PAufenthalt = ^TAufenthalt;
TAufenthalt = record
wert1,wert2,wert3,wert4,..wert21 end;

nun möchte ich absteigend nach wert2 die Liste sortieren, also die aufenthalte in die richtige reihenfolge bringen.

Kann mir da jemand helfen??

Vielen Dank

Crossmaen

Alexander 12. Mai 2004 10:50

Re: TList sortieren
 
Zum Thema Sortieren wirst du hier mehr als fündig ;-)

Das Argument von Sort ist eine Vergleichsfunktion, mit der du die eigentlich sortierung verändern kannst...

Edit: Hiermit kannst du eine Liste alphabethisch sortieren lassen:
Delphi-Quellcode:
function CompareNames(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name);
end;
Aus der Delphi-Hilfe ;-)

Niko 12. Mai 2004 10:51

Re: TList sortieren
 
Du brauchst zuerst eine Vergleichsfunktion die Delphi sagt welcher von zwei Records kleiner ist:
Delphi-Quellcode:
function Compare(Item1, Item2: Pointer): Integer;
begin
  Result := Item2^.wert2 - Item1^.wert1;
end;
Diese Funktion übergibst du dann an die Methode Sort:
Delphi-Quellcode:
MyList.Sort(Compare);
P.S.: Wenn du das nächste Mal delphi-Tags setzt lässt sich der Code leichter lesen.

st-matze 15. Mai 2004 19:13

Re: TList sortieren
 
Moin,moin!

Ich möcht mich hier auch noch mal einklinken. Mit der Compare-Methode von TList habe ich ein kleines Problem.

Es gibt ja das schöne Beispiel aus der Hilfe:

Delphi-Quellcode:
function CompareNames(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  List1.Sort(@CompareText);
end;
Das Problem ist, dass der as operator nicht mit Pointer funktioniert. Ergo auch das Beispiel funktioniert nicht.
Kann mir jemand sagen wie ich einen Pointer-Inhalt auf eine Klasse casten kann?
Ansonsten kann ich nicht auf die Inhalte des Pointers zugreifen.

Irgendwie benötige ich die funktionalität : (Pointer as Class)

MfG
st-matze

SirThornberry 15. Mai 2004 19:22

Re: TList sortieren
 
anstelle von
Delphi-Quellcode:
(Pointer as Class)
einfach
Delphi-Quellcode:
class(Pointer)

st-matze 15. Mai 2004 19:27

Re: TList sortieren
 
Thx

klappt jetzt.

Manchmal sieht man den Wald vor lauter bäumen nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz