Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

freak4fun 11. Sep 2008 21:42


Objekte nach Datum Sortieren
 
Ich habe eine Klasse TTerminKalender mit einer ObjectList, die Elemente meiner Klasse TTermin enthält. Nun möchte ich die Objekte in dewr ObjectList nach dem Datem (Eigenschaft von TTermin) sortieren. So geht es, aber geht es besser?
Delphi-Quellcode:
procedure TTerminKalender.Sort;
var
  i, j: Integer;
begin
  for i := 0 to FTerminListe.Count - 2 do
    for j := i + 1 to FTerminListe.Count - 1 do
      if TimeToStr(TTermin(FTerminListe.Items[i]).Time) > TimeToStr(TTermin(FTerminListe.Items[j]).Time) then
        Tausche(TTermin(FTerminListe.Items[i]), TTermin(FTerminListe.Items[j]));
end;

procedure TTerminKalender.Tausche(AOne, ATwo: TTermin);
var
  lTemp: TTermin;
begin
  lTemp := TTermin.Create(0, 0,'');
  try
    lTemp.Time := AOne.Time;
    lTemp.Text := AOne.Text;

    AOne.Time := ATwo.Time;
    AOne.Text := ATwo.Text;

    ATwo.Time := lTemp.Time;
    ATwo.Text := lTemp.Text;

  finally
    lTemp.Free;
  end;
end;

mkinzler 11. Sep 2008 21:46

Re: Objekte nach Datum Sortieren
 
-Statt Bubble-Sort QuickSort verwenden
-Beim Einfügen an richtige Stelle einfügen

Bernhard Geyer 11. Sep 2008 21:47

Re: Objekte nach Datum Sortieren
 
Such dir einen besseren Algorithmus aus.

omata 11. Sep 2008 22:03

Re: Objekte nach Datum Sortieren
 
dann eben nicht...

freak4fun 11. Sep 2008 22:37

Re: Objekte nach Datum Sortieren
 
Delphi-Quellcode:
procedure TTerminKalender.Sort;

  procedure Swap(AOne, ATwo: TTermin);
  var
    lTemp: TTermin;
  begin
    lTemp := TTermin.Create(0, 0,'');
    try
      lTemp.Time := AOne.Time;
      lTemp.Text := AOne.Text;

      AOne.Time := ATwo.Time;
      AOne.Text := ATwo.Text;

      ATwo.Time := lTemp.Time;
      ATwo.Text := lTemp.Text;
    finally
      lTemp.Free;
    end;
  end;

var
  i, j: Integer;
begin
  for i := 0 to FTerminListe.Count - 1 do
    for j := 0 to FTerminListe.Count - 2 do
      if TimeToStr(TTermin(FTerminListe.Items[j]).Time) > TimeToStr(TTermin(FTerminListe.Items[j + 1]).Time) then
        Swap(TTermin(FTerminListe.Items[j]), TTermin(FTerminListe.Items[j + 1]));
end;
Sieht nun so aus. Time ist vom Typ TDateTime. :)

Hansa 12. Sep 2008 02:13

Re: Objekte nach Datum Sortieren
 
Was soll das mit dem "tauschen" ? Soll die Liste umsortiert werden, oder soll sie nur nach irgendeinem Kriterium sortiert angzeigt/durchlaufen werden ? Kleiner, aber feiner Unterschied ! Desweiteren würde mich mal der genaue Aufruf der Sort-Prozedur im Programm interessieren.

freak4fun 12. Sep 2008 14:27

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von Hansa
Was soll das mit dem "tauschen" ? Soll die Liste umsortiert werden, oder soll sie nur nach irgendeinem Kriterium sortiert angzeigt/durchlaufen werden ? Kleiner, aber feiner Unterschied !

Die Liste soll nach dem Datum + Zeit (Time) sortiert werden. Ausgegeben wird sie schrittweise von Anfang bis Ende in einer For-Schleife.
Zitat:

Zitat von Hansa
Desweiteren würde mich mal der genaue Aufruf der Sort-Prozedur im Programm interessieren.

Aufrofüber einen Button mit der Caption "Sortieren". ;)
Delphi-Quellcode:
myTerminKalender.Sort;

angos 12. Sep 2008 14:38

Re: Objekte nach Datum Sortieren
 
Hi,

das wird so nicht funktionieren.

01.03.2008
01.02.2008
01.01.2008

wird zu

01.02.2008
01.03.2008
01.01.2008



das ist IMHO unsortiert ;)


Gruß

DeddyH 12. Sep 2008 15:03

Re: Objekte nach Datum Sortieren
 
Wieso wird eigentlich zum Vergleich in String konvertiert? Man kann TDateTime doch direkt vergleichen.

freak4fun 12. Sep 2008 15:29

Re: Objekte nach Datum Sortieren
 
Zitat:

Zitat von DeddyH
Wieso wird eigentlich zum Vergleich in String konvertiert? Man kann TDateTime doch direkt vergleichen.

Das hatte nichts funktioniert. Ich schau da noch mal drüber. :-D


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

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