![]() |
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:
so nun möchte ich die Items der Datalist nach den Namen im Record Sortieren.
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; hat mir da evtl Jemand ne lösung? thx Daniel |
Re: Sortieren eines "Objektes"
Servus Zerolith,
folgender Link führt Dich zu gängigen ![]() 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 |
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! |
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:
PS: Es gibt auch einen Tauschalgorithmus von 2 Werten ohne Hilfsvariable, aber der hier tut's auch.
Var a, b : String;
Procedure swap(VAR a,b : String); Var Hilf : String; begin Hilf:= a; a:= b; b:= hilf; end; |
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? |
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