Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObjectList (https://www.delphipraxis.net/48466-tobjectlist.html)

Taladan 25. Jun 2005 20:53


TObjectList
 
Mal ne dumme Frage, wie sortiert man eine TObjectList? Ich kenne den Befehl TObjeclist.Sort, doch wie verwendet man den? In meiner Liste gibt es nur Objekte einer Klasse. Diese Klasse hat einen Integer-Wert namens ID und nach den wollte ich sortieren.

sniper_w 25. Jun 2005 21:01

Re: TObjectList
 
Zitat:

The following code sorts the objects in a list in alphabetical order based on their names. It assumes that the list contains only component references.
The CompareNames function performs the comparisons between objects in the list. The list is sorted when the user clicks a button.

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;

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Khabarakh 25. Jun 2005 21:04

Re: TObjectList
 
Der Eintrag der D2005-Hilfe ist ja wirklich schrecklich, hier mal verständlicher von meinem guten alten D6:
Zitat:

Mit Sort wird für die Liste ein QuickSort-Algorithmus gestartet, der auf der Vergleichsfunktion Compare basiert.

Delphi-Quellcode:
type TListSortCompare = function (Item1, Item2: Pointer): Integer;
procedure Sort(Compare: TListSortCompare);
Beschreibung

Mit Sort können die Elemente des Arrays Items sortiert werden. Compare ist eine Vergleichsfunktion, die anzeigt, wie die Elemente sortiert sind. Compare gibt einen Wert kleiner Null zurück, wenn Item1 kleiner ist als Item2. Der Rückgabewert ist Null, wenn beide Elemente gleich sind. Wenn Item1 größer als Item2 ist, ist der Rückgabewert größer Null.

sniper_w 25. Jun 2005 21:19

Re: TObjectList
 
Das was aber von D6 Proffesional, was ich da oben geschickt habe...

Khabarakh 25. Jun 2005 21:43

Re: TObjectList
 
Nein, ich hatte vermutet, dass Taladan in seine D2005-Hilfe geschaut hat, daraus wird man wirklich nicht schlau:
Zitat:

Startet für die Liste einen QuickSort-Algorithmus, der auf der Vergleichsfunktion Compare basiert.
Klasse
TList

Syntax


[Delphi] public procedure Sort(Compare: TListSortCompare);


Beschreibung
Mit Sort können die Elemente des Arrays Items sortiert werden. Compare ist eine Vergleichsfunktion, die anzeigt, wie die Elemente sortiert sind.

Taladan 25. Jun 2005 22:03

Re: TObjectList
 
So nu hab ich folgendes gemacht, aber ich mach wohl irgendwas falsch

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

procedure TNamenBox.HeaderControl1SectionClick(HeaderControl: THeaderControl;
  Section: THeaderSection);
begin
  case Section.ID of
  0: begin
        NamenList.Sort(@CompareID);
     end;
  end;
end;

sniper_w 25. Jun 2005 22:27

Re: TObjectList
 
Delphi-Quellcode:
function CompareID(Item1, Item2: Pointer): Integer;
begin
   Result := CompareText((Item1 as TName).Name, (Item2 as TName).Name);
end
Da musst du nicht Name, sondern ID vergleichen.

karma 14. Sep 2009 15:20

Re: TObjectList
 
Ich grab den Thread mal wieder aus...
Ich möchte mit der hier beschriebenen Methode eine ObjectList sortieren, die mit Objekten der Klasse TPoint gefüllt ist.

Delphi-Quellcode:
//TPoint sieht so aus:
type
  Tpoint = class(TObject)
    x,y,z:double;
    t:double;
  end;

//meine sortierfunktion folgendermaßen

function sortpoints(Item1, Item2: Pointer): Integer;
begin
   if(((Item1 as Tpoint).t) < ((Item2 as TPoint).t)) then Result := -1
   else if(((Item1 as Tpoint).t) = ((Item2 as TPoint).t)) then Result := 0
   else result:=1;
end;
Leider funktioniert das "as" an der Stelle nicht, Delphi gibt aus "E2015 Operator ist auf diesen Operandentyp nicht anwendbar". Was mache ich falsch?

Klaus01 14. Sep 2009 15:24

Re: TObjectList
 
Gibt es vielleicht Überschneidungen der Klasse TPoint (die ist von dir)
und dem record TPoint (der wird von Delphi bereitgestellt)?

Vielleicht benamst Du Deine Klasse um?

Grüße
Klaus

mleyen 14. Sep 2009 15:29

Re: TObjectList
 
Delphi-Quellcode:
function sortpoints(Item1, Item2: Pointer): Integer;
begin
  if (((Item1^ as Tpoint).t) < ((Item2^ as TPoint).t)) then
    Result := -1
  else
  if (((Item1^ as Tpoint).t) = ((Item2^ as TPoint).t)) then
    Result := 0
  else
    Result := 1;
end;
Pointer evtl dereferenzieren?
Ja, klar, ist ja auch kein PRecord...
(Auf 'TPoint als Klasse zu verwenden' muss man erstmal kommen) :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr.
Seite 1 von 2  1 2      

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