AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TObjectList

Ein Thema von Taladan · begonnen am 25. Jun 2005 · letzter Beitrag vom 14. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#1

TObjectList

  Alt 25. Jun 2005, 21:53
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.
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: TObjectList

  Alt 25. Jun 2005, 22:01
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]
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: TObjectList

  Alt 25. Jun 2005, 22:04
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: TObjectList

  Alt 25. Jun 2005, 22:19
Das was aber von D6 Proffesional, was ich da oben geschickt habe...
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: TObjectList

  Alt 25. Jun 2005, 22:43
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Taladan
Taladan

Registriert seit: 5. Aug 2003
Ort: Osnabrück
505 Beiträge
 
Delphi 2005 Professional
 
#6

Re: TObjectList

  Alt 25. Jun 2005, 23:03
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;
Marco
Wer Rechtschreibfehler findet, der darf sie behalten

Carpe Diem - Nutze den Tag (und zwar den ganzen!)
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: TObjectList

  Alt 25. Jun 2005, 23:27
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.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
karma

Registriert seit: 14. Mai 2008
27 Beiträge
 
#8

Re: TObjectList

  Alt 14. Sep 2009, 16:20
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?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.639 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TObjectList

  Alt 14. Sep 2009, 16:24
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#10

Re: TObjectList

  Alt 14. Sep 2009, 16:29
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf