Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sortieren eines "Objektes" (https://www.delphipraxis.net/8418-sortieren-eines-objektes.html)

Zerolith 4. Sep 2003 11:37


Sortieren eines "Objektes"
 
Hallo!

ich hab eine etwas komplexe Struktur

Als Erstes einen Record

der einen String "Name" enhält (u.a).

dann ein ein Object dass den Record als Property hat.

und dann eine Abgeleitet Version von TList (TDataList)

die als Property das Object hat.


Delphi-Quellcode:
TDataList = class(TList)
  public
    procedure Delete(Index: integer);
    procedure Clear;
    procedure ClearIndexes;
    procedure DeleteIndex(Index: integer);
  end;

...

{ TDataList }

procedure TDataList.Clear;
begin
  while Count <> 0 do Delete(1);
end;

procedure TDataList.ClearIndexes;
begin
  inherited Clear;
end;

procedure TDataList.Delete(Index: integer);
begin
  if (Index = 0) or (Index > Count) then Exit;
  TObject(Items[Index-1]).Free;
  inherited Delete(Index-1);
end;

procedure TDataList.DeleteIndex(Index: integer);
begin
  if (Index = 0) or (Index > Count) then Exit;
  inherited Delete(Index-1);
end;
so nun möchte ich die Items der Datalist nach den Namen im Record Sortieren.

hat mir da evtl Jemand ne lösung?

thx
Daniel

Dannyboy 4. Sep 2003 12:16

Re: Sortieren eines "Objektes"
 
Servus Zerolith,
folgender Link führt Dich zu gängigen Sortieralgorithmen

Zum Einfügen verwende am besten dann Append oder Add. Es gibt
allerdings auch Komponenten in Delphi mit der Eigenschaft SORT, die Dir
Deine Strings automatisch sortieren.

MFG DANNYBOY

Zerolith 4. Sep 2003 13:07

Re: Sortieren eines "Objektes"
 
Ich glaub du hast mich ein bisschen Missverstanden.

Jedes "ITEM" der TDAtaList hat einen String in nem Record (der Als Property da is)


ich muss also irgendwie den Text der Items vergleichen und dann evtl Vertauschen. Wobei mir das Vertauschen mehr sorgen macht.

Die sortier Algos habbi scho gefunden.

Allerdings sind die dohc auf Zahlen ausgelegt - wie is das bei strings?

thx!

Dannyboy 4. Sep 2003 13:26

Re: Sortieren eines "Objektes"
 
Du kannst Strings ebenso wie Zahlen mit den Operatoren <, >, =
vergleichen und dann mit Hilfe der Algos sortieren. Das Tauschen kannst
Du mit einer direkten Zuweisung der Strings machen. Hierzu nimmst Du den nötigen Index der Items.

Mach einen Dreiecks-Tausch mit einer Hilfsvariable nach dem Motto


Delphi-Quellcode:
Var a, b : String;

Procedure swap(VAR a,b : String);
Var Hilf : String;
begin
  Hilf:= a;
  a:= b;
  b:= hilf;
end;
PS: Es gibt auch einen Tauschalgorithmus von 2 Werten ohne Hilfsvariable, aber der hier tut's auch.

Zerolith 4. Sep 2003 13:30

Re: Sortieren eines "Objektes"
 
das mit der Hilfsvariable weiß ich - danke trotzdem


ehm

d.h

a < b < c oder wie?

ab < cd
aa < bb
ba > ab ??

so?

Dannyboy 4. Sep 2003 13:52

Re: Sortieren eines "Objektes"
 
Genau, Du hast das Prinzip verstanden. Ist ja genau wie mit den Zahlen.
Man schaut von links nach rechts und vergleicht die Werte.
So, lass mich Dich vor einer bösen Überraschung warnen und Dir noch
einen kleinen Hinweis gebenBedenke, dass Strings per Ansi-Code
miteinander verglichen werden, ergo gilt ...

('a' < 'b') = TRUE, weil (ord('a') < ord('b')) = TRUE; logisch.

Ord gibt in diesem Falle quasi die lineare Position in der Ansi-Tabelle zurück.

Bedenke, dass 'a' und 'A' unterschiedliche Ordinalwerte haben, ergo gilt

('a' = 'A') = FALSE !!!

Wollte Dir nun mal diesen gleichen Denkanstoß geben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 Uhr.

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