Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList.Sort Rückwärts? (https://www.delphipraxis.net/138238-tlist-sort-rueckwaerts.html)

xZise 5. Aug 2009 16:59


TList.Sort Rückwärts?
 
Hallo ihr,
kann man bei der TList auch rückwärts sortieren? Oder muss jedesmal eine neue Compare-Methode erstellen? Einmal für Vorwärts und einmal für Rückwärts?

MfG
xZise

DeddyH 5. Aug 2009 17:01

Re: TList.Sort Rückwärts?
 
Zitat:

Zitat von xZise
Oder muss jedesmal eine neue Compare-Methode erstellen? Einmal für Vorwärts und einmal für Rückwärts

Eine andere Möglichkeit ist mir persönlich nicht bekannt und sooo viel Aufwand ist das ja nicht.

SirThornberry 5. Aug 2009 17:08

Re: TList.Sort Rückwärts?
 
Je nach dem wie du die Liste dann verwendest ist es vielleicht weniger Aufwand die Einträge einfach umgekehrt auszulesen.

Die Muhkuh 5. Aug 2009 17:18

Re: TList.Sort Rückwärts?
 
Du kannst ja genau so gut vorwärts sortieren und rückwärts auslesen.

Sollte eigentlich kein Unterschied machen zu rückwärts sortieren und vorwärts auslesen.

xZise 5. Aug 2009 17:48

Re: TList.Sort Rückwärts?
 
Zitat:

Zitat von SirThornberry
Je nach dem wie du die Liste dann verwendest ist es vielleicht weniger Aufwand die Einträge einfach umgekehrt auszulesen.

Zitat:

Zitat von Die Muhkuh
Du kannst ja genau so gut vorwärts sortieren und rückwärts auslesen.

Sollte eigentlich kein Unterschied machen zu rückwärts sortieren und vorwärts auslesen.

Jain. Für das Ergebnis nicht, aber dann müsste ich speichern, wie rum ich sortiert habe. Ansonsten kann ich einfach das andersherum sortieren lassen und nach außen hin ändert sich nix am Zugriff.

Zitat:

Zitat von DeddyH
Zitat:

Zitat von xZise
Oder muss jedesmal eine neue Compare-Methode erstellen? Einmal für Vorwärts und einmal für Rückwärts

Eine andere Möglichkeit ist mir persönlich nicht bekannt und sooo viel Aufwand ist das ja nicht.

Jain. Ich habe mindestens 4 Methoden die ich dann doppelt habe. Es ist zwar kaum Aufwand, aber das bläht doch alles etwas auf. Besonders, weil der Unterschied ja NUR ein Vorzeichen ist.

Naja schade.

MfG
xZise

Reinhard Kern 5. Aug 2009 17:58

Re: TList.Sort Rückwärts?
 
Zitat:

Zitat von xZise
Zitat:

Zitat von Die Muhkuh
Du kannst ja genau so gut vorwärts sortieren und rückwärts auslesen.

Sollte eigentlich kein Unterschied machen zu rückwärts sortieren und vorwärts auslesen.

Jain. Für das Ergebnis nicht, aber dann müsste ich speichern, wie rum ich sortiert habe.

Denkfehler: dann gerade nicht! (Du sortierst immer vorwärts - DAS kannst du dir hoffentlich merken. Beim Auslesen kannst du entscheiden ob vorwärts oder rückwärts).

Gruss Reinhard

himitsu 5. Aug 2009 18:09

Re: TList.Sort Rückwärts?
 
du kannst dir ja in der Liste (evtl. im Tag?) die Richtung speichern und die Vergleichsprozeduren werten das aus und kehren notfalls einfach ihr Ergebnis noch schnell um, bevor sie sich beenden.

xZise 5. Aug 2009 18:17

Re: TList.Sort Rückwärts?
 
Zitat:

Zitat von Reinhard Kern
Zitat:

Zitat von xZise
Zitat:

Zitat von Die Muhkuh
Du kannst ja genau so gut vorwärts sortieren und rückwärts auslesen.

Sollte eigentlich kein Unterschied machen zu rückwärts sortieren und vorwärts auslesen.

Jain. Für das Ergebnis nicht, aber dann müsste ich speichern, wie rum ich sortiert habe.

Denkfehler: dann gerade nicht! (Du sortierst immer vorwärts - DAS kannst du dir hoffentlich merken. Beim Auslesen kannst du entscheiden ob vorwärts oder rückwärts).

Gruss Reinhard

Ehrm wo ist der Denkfehler? In den Einstellungen steht, dass nicht der neueste sondern älteste Eintrag genutzt werden soll. Also was mache ich:
Delphi-Quellcode:
Sort(<Datumsvergleichsfunktion>, Rückwärts)
Das wars. Danach ist es mir egal, ob der neueste oder älteste Eintrag zuerst kommt. Ansonten müsste ich JEDESMAL wenn ich auf einen Eintrag zugreifen will:
Delphi-Quellcode:
if Rückwärts then
  Blabla := Items[Count - 1]
else
  Blabla := Items[0];
Zitat:

Zitat von himitsu
du kannst dir ja in der Liste (evtl. im Tag?) die Richtung speichern und die Vergleichsprozeduren werten das aus und kehren notfalls einfach ihr Ergebnis noch schnell um, bevor sie sich beenden.

Naja TList hat kein Tag hat die schonmal nicht. Aber das "Problem" ist auch, dass dann die Einträge die Liste kennen müssen, weil dummerweise kann man keine Funktionen von Klassen benutzen.

MfG
xZise

himitsu 5. Aug 2009 18:28

Re: TList.Sort Rückwärts?
 
OK, dann ist das 'ne blöde Idee ... dachte die bekommt mit, welche TList zu den Einträgen gehört
Zitat:

(ist schon blöd, wenn die OH nicht läuft man da nicht mal nachsehn kann und auf die Idee mal in D7 zu gucken war ich och nicht gekommen :oops: )
aber dann bleibt dir wohl nichts anderes Übrig, als da noch weitere Sortierprozeduren zu erstellen
(eine "lobale" Gloabel variable, wo du extern die Richtung speicherst und das in den Prozeduren abfragst, wäre nicht so gut ... man hätte da zumindestens noch einen weiteren Parameter mit in die Funktion einbauen können, wo man dann noch zusätzliche infost übermitteln kann)

PS: oder du sortierst erstmal die Liste
und sortierst diese danach dann nochmal um, wenn es wückwärst ist :nerd:
Delphi-Quellcode:
Liste.Sort(...);
if Rückwärts then
  for i := 0 to Liste.Count div 2 - 1 do begin
    P := Liste.Items[i];
    Liste.Items[i] := Liste.Items[Liste.Count - i];
    Liste.Items[Liste.Count - i] := P;
  end;

xZise 5. Aug 2009 18:40

Re: TList.Sort Rückwärts?
 
Zitat:

Zitat von himitsu
OK, dann ist das 'ne blöde Idee ... dachte die bekommt mit, welche TList zu den Einträgen gehört
Zitat:

(ist schon blöd, wenn die OH nicht läuft man da nicht mal nachsehn kann und auf die Idee mal in D7 zu gucken war ich och nicht gekommen :oops: )
aber dann bleibt dir wohl nichts anderes Übrig, als da noch weitere Sortierprozeduren zu erstellen
(eine "lobale" Gloabel variable, wo du extern die Richtung speicherst und das in den Prozeduren abfragst, wäre nicht so gut ... man hätte da zumindestens noch einen weiteren Parameter mit in die Funktion einbauen können, wo man dann noch zusätzliche infost übermitteln kann)

Ja genau ;) Das hatte ich auch nicht vor. Und joar, also .Sort ist an sich ganz genial gemacht, aber das ist "Verbesserungswürdig" (z.B. ein "of object" dürfte helfen ^^ Oder intern eine Rückwärtsfunktion, dass dies nicht im Vergleich entschieden werden muss).

Zitat:

Zitat von himitsu
PS: oder du sortierst erstmal die Liste
und sortierst diese danach dann nochmal um, wenn es wückwärst ist :nerd:
Delphi-Quellcode:
Liste.Sort(...);
if Rückwärts then
  for i := 0 to Liste.Count div 2 - 1 do begin
    P := Liste.Items[i];
    Liste.Items[i] := Liste.Items[Liste.Count - i];
    Liste.Items[Liste.Count - i] := P;
  end;

Jeha :mrgeen: , ich glaube ich bleibe bei zwei Methoden pro Typ.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.
Seite 1 von 2  1 2      

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