![]() |
Objektliste sortieren
Hi,
Kann man TObjectLists nur als string mit CompareText sortieren ? Momentan mache ich das so :
Delphi-Quellcode:
Aufruf so :
function VergleicheWerte (Item1, Item2: Pointer): Integer;
begin (* Result := CompareText(TDatenObject(Item1).name, TDatenObject(Item2).name); *) Result := CompareText(TDatenObject(Item1).nr, TDatenObject(Item2).nr); end;
Delphi-Quellcode:
Das auskommentierte geht. Wie soll ich jetzt die nr = integer behandeln ? Die Items haben auch noch real, boolean usw. Felder. Da gehts dann weiter. Muss da immer der Typ umgewandelt werden, oder gibt es Alternativen zu CompareText ? Unschön ist auch noch, dass Delphi Warnungen bringt wegen Pointer und @. Wie kriegt man die weg ?
RohDaten.Sort(@VergleicheWerte); // Rohdaten = TObjectList
|
Re: Objektliste sortieren
Hi,
eventuell mit Result := TDatenObject(Item1).nr - TDatenObject(Item2).nr ? Mfg FAlter |
Re: Objektliste sortieren
Hai Hansa,
ein CompareText auf einen Integerwert macht natürlich keinen Sinn. Warum gibst Du nicht einfach das gewünschte Ergebniss der Funktion direkt als Result zurück? |
Re: Objektliste sortieren
Für jeden Datentyp eine eigene Hilfsfunktion schreiben:
Delphi-Quellcode:
Aus Optimierungsgründen wird der Fall a=b als letztes abgehandelt, da die Wahrscheinlichkeit
function CompareInt(a,b:Integer):Integer;
begin if a > b then Result := 1 else if a < b then Result := -1 else Result := 0; // a = b end; viel geringer als a > b oder a < b ist. |
Re: Objektliste sortieren
Hi,
Zitat:
Mfg FAlter |
Re: Objektliste sortieren
Hai Hai,
So ungefähr ?
Delphi-Quellcode:
Das da bringt momentan Zugriffsverletzung. Dem wird das miit @ übergebene boolean nicht schmecken.
function VergleicheWerte (Item1, Item2: Pointer): boolean;
begin Result := TDatenObject(Item1).nr > TDatenObject(Item2).nr; end; |
Re: Objektliste sortieren
seit mindestens D7
![]()
Delphi-Quellcode:
uses Math;
function VergleicheWerte(Item1, Item2: Pointer): boolean; begin Result := CompareValue(TDatenObject(Item1).nr, TDatenObject(Item2).nr); end; |
Re: Objektliste sortieren
Zitat:
schaue Dir mal die beiden Beiträge von FAlter an. |
Re: Objektliste sortieren
Zitat:
|
Re: Objektliste sortieren
Zitat:
|
Re: Objektliste sortieren
Wohl eher mit CMOVcc. :mrgreen:
|
Re: Objektliste sortieren
Uff, ihr schreibt noch den roten Kasten kaputt. :mrgreen: Nene, nicht noch Assembler. Es geht um kein AKW. Mit dem - das geht schon mal. Die Delphi Hilfe zeigt leider kein CompareValue bei "siehe auch". Das muss man eben kennen. Jetzt hat mir zufällig die Codevervollst. noch das hier beschert :
Zitat:
|
Re: Objektliste sortieren
Dann sortier mal die Zhalen eins bis hundert alphabetisch und guck, was passiert.
|
Re: Objektliste sortieren
Zitat:
Code:
1
10 100 11 12 13 14 ... 2 20 21 ... 99 |
Re: Objektliste sortieren
Wollt ihr mich für blöd verkaufen ? :warn: :mrgreen: Dafür hat man Funktionen
Delphi-Quellcode:
Ich werde jetzt das STringgrid mal bis zum platzen füllen und wirklich gucken, was los ist.
function rb (st : string;feldweite : byte) : string;
|
Re: Objektliste sortieren
Zitat:
CMOVcc würd ich mehr für Min/Max-Funktionen nehmen ... hier braucht man doch mehr -1..1 |
Re: Objektliste sortieren
Jetzt gibts aber noch einen prinzipiellen Haken : ich sortiere gerne das Stringgrid über Click auf Titelzeile. Ich merke mir dazu die entsprechende Spalte über die dann sortiert wird. Wie bringe ich das jetzt der Vergleichs-Funktion bei ? Ich sehe nur 2 Möglichkeiten :
1. : für jede Spalte eine eigene Sortierfunktion aufrufen, oder 2. : innerhalb dieser Funktion entsprechend reagieren. 2.1 : Bei letzerem gäbe es wieder zwei Varianten : Parameter für die Funktion (glaube aber, der @ macht da nicht mit) oder 2.2 : protected Variable deklarieren. Any ideas ? :wiejetzt: Der Klammeraffe muss allerdings sowieso noch weg wegen der Warnungen, oder nicht ? zu 2.1 : Parameter kann ich ja nicht wegen dem @ benutzen. Scheidet wohl aus. zu 2.2 : ich kriege die Vergleichs-Funktion nicht in die Form. Was jetzt ? |
Re: Objektliste sortieren
TSortAString Grid v.1.2.0 FWS 10 k 18 Mar 1998
By Johan Godfried. Sort a StringGrid (or any descendant) anyway you like, Horizontal / Vertical, Ascending / Descending, Character / Numeric / Date. Single column sort key only at this time. This is not grid, but for grid. ![]() |
Re: Objektliste sortieren
Scheidet direkt aus, weil nicht vom Stringgrid abgeleitet, sondern bloß von TComponent.
|
Re: Objektliste sortieren
Zitat:
Das TStringGrid kann so bleiben wie es ist, es wird ja "von aussen" sortiert. Man könnte die Komponente SASG auch auf eine ganz "normale Klasse" reduzieren um Overhead zu sparen. |
Re: Objektliste sortieren
Ah ja, ich sehe, die haben das Stringgrid als property eingebaut. Nützt aber auch nicht viel. Einarbeitungs-Aufwand > Eigenentwicklung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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