Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Objekte nach Datum Sortieren (https://www.delphipraxis.net/120511-objekte-nach-datum-sortieren.html)

Khabarakh 12. Sep 2008 15:38

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von freak4fun
Ich habe eine Klasse TTerminKalender mit einer ObjectList, die Elemente meiner Klasse TTermin enthält.

Mich wundert ein wenig, dass es noch niemand vorgeschlagen hat :gruebel:, sei's drum: Wenn du schon eine TObjectList hast, wie wäre es dann mit TList.Sort (Quicksort)?

freak4fun 12. Sep 2008 15:42

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von freak4fun
Ich habe eine Klasse TTerminKalender mit einer ObjectList, die Elemente meiner Klasse TTermin enthält.

Mich wundert ein wenig, dass es noch niemand vorgeschlagen hat :gruebel:, sei's drum: Wenn du schon eine TObjectList hast, wie wäre es dann mit TList.Sort (Quicksort)?

Kann ich da angeben wonach sortiert wird?

DeddyH 12. Sep 2008 15:44

Re: Objekte nach Datum Sortieren
 
Du musst sogar eine Vergleichsfunktion schreiben und diese der Sort-Methode übergeben.

Hansa 12. Sep 2008 17:18

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von freak4fun
Delphi-Quellcode:
myTerminKalender.Sort;

Und was ist myTerminKalender ? Eine TObjectList oder was ???

DeddyH 12. Sep 2008 17:23

Re: Objekte nach Datum Sortieren
 
Das ist die Klasse, die die ObjectList enthält :zwinker:

Hansa 12. Sep 2008 17:23

Re: Objekte nach Datum Sortieren
 
Bei mir geht das so nicht :

Delphi-Quellcode:
DatenObjektListe.Sort;//(@VergleicheWerte);
Wer Fragen stellt, der sollte zumindest mal die eigene Syntax überprüfen und die Compilermeldungen nicht ignorieren. Da kann doch fast nur sowas kommen :
Zitat:

Zitat von D7-Compiler
[Fehler] Ausg.pas(155): Nicht genügend wirkliche Parameter

8)

DeddyH 12. Sep 2008 17:34

Re: Objekte nach Datum Sortieren
 
Seine Klasse hat anscheinend eine eigene Sort-Methode implementiert, steht ja im Ausgangspost. Nur wäre es dort sinnvoll, die Sort-Methode der enthaltenen ObjectList aufzurufen, dann sollte es keine Probleme geben und schnell ist das auch noch ;)

freak4fun 14. Sep 2008 14:10

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von angos
01.03.2008
01.02.2008
01.01.2008

wird zu

01.02.2008
01.03.2008
01.01.2008

Wie bekomme ich diese Liste als TDateTime sortiert? Mit >, < geht es nicht. :?

DeddyH 14. Sep 2008 14:25

Re: Objekte nach Datum Sortieren
 
Und das sind auch ganz sicher TDate-Werte?

[edit] Gerade mal mit der D2009-Trial ausprobiert:
Delphi-Quellcode:
...

type TMyClass = class
  private
    FDatum: TDate;
  public
    property Datum: TDate read FDatum write FDatum;
end;

...

function SortProc(Item1, Item2: Pointer): Integer;
begin
  if TMyClass(Item1).Datum > TMyClass(Item2).Datum then
    Result := 1
  else if TMyClass(Item1).Datum < TMyClass(Item2).Datum then
    Result := -1
  else
    Result := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
var dummy: TMyClass;
begin
  FList := TObjectList.Create;
  dummy := TMyClass.Create;
  dummy.Datum := StrToDate('01.03.2008');
  FList.Add(dummy);
  dummy := TMyClass.Create;
  dummy.Datum := StrToDate('01.02.2008');
  FList.Add(dummy);
  dummy := TMyClass.Create;
  dummy.Datum := StrToDate('01.03.2007');
  FList.Add(dummy);
  dummy := TMyClass.Create;
  dummy.Datum := StrToDate('01.04.2009');
  FList.Add(dummy);
  dummy := TMyClass.Create;
  dummy.Datum := StrToDate('01.10.2008');
  FList.Add(dummy);
  FList.Sort(@SortProc); //FList ist vom Typ TObjectList
end;
Tut genau, wie es soll[/edit]

freak4fun 14. Sep 2008 15:10

Re: Objekte nach Datum Sortieren
 
Bäume und Wald und so. :oops:
Delphi-Quellcode:
procedure TTerminKalender.Sort(AList: TStrings);

  function CompareDate(Item1, Item2: Pointer): Integer;
  var
    Val1, Val2: TDateTime;
  begin
    val1 := TTermin(Item1).FTime;
    val2 := TTermin(Item2).FTime;
    Result := DateUtils.CompareDate(Val1, Val2);
  end;

var
  i, j: Integer;
begin
  for i := 0 to FTerminListe.Count - 2 do
    for j := i + 1 to FTerminListe.Count - 1 do
      if CompareDate(TTermin(FTerminListe.Items[i]), TTermin(FTerminListe.Items[j])) = 1 then
        FTerminListe.Exchange(i, j);
end;
Danke für die Gedult und Mühe. :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 Uhr.
Seite 2 von 3     12 3      

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