AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortieren eines "Objektes"

Ein Thema von Zerolith · begonnen am 4. Sep 2003 · letzter Beitrag vom 4. Sep 2003
Antwort Antwort
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#1

Sortieren eines "Objektes"

  Alt 4. Sep 2003, 12:37
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
Daniel
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#2

Re: Sortieren eines "Objektes"

  Alt 4. Sep 2003, 13:16
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
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Sortieren eines "Objektes"

  Alt 4. Sep 2003, 14:07
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!
Daniel
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#4

Re: Sortieren eines "Objektes"

  Alt 4. Sep 2003, 14:26
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.
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Sortieren eines "Objektes"

  Alt 4. Sep 2003, 14:30
das mit der Hilfsvariable weiß ich - danke trotzdem


ehm

d.h

a < b < c oder wie?

ab < cd
aa < bb
ba > ab ??

so?
Daniel
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#6

Re: Sortieren eines "Objektes"

  Alt 4. Sep 2003, 14:52
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:13 Uhr.
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