![]() |
Sortierung von Array of Record
Hallo zusammen,
ich habe einige Arrays vom Typ Record, z.B.
Delphi-Quellcode:
Allen Records gemein ist das Datum, und das soll auch mein Sortierkriterium sein.
type
TRecord1 = record Datum: String; Text1: String; Text2: String; Text3: String; end; TRecord1Array = Array of TRecord1; TRecord2 = record Datum : String; Text : String; Nummer: Integer; Geld : Currency; end; TRecord2Array = Array of TRecord2; TRecord3 = record Datum : String; Nummer: Integer; Text1 : String; Text2 : String; Text3 : String; Text4 : String; Text5 : String; end; TRecord3Array = Array of TRecord3; Gibt es eine Möglichkeit, diese verschiendenen Arrays durch eine einzige Sortierfunktion sortieren zu lassen? Vielen Dank, Knochen |
AW: Sortierung von Array of Record
Nur mit bösen Hacks, die ich nicht empfehlen würde (z.B. einfach per Pointer zugreifen, da das Feld immer am Anfang steht).
Das Problem sind schlicht die Records. Wenn du stattdessen Klassen nimmst, kannst du das ganze mit Vererbung sehr elegant lösen. |
AW: Sortierung von Array of Record
Jupp, in neueren Delphis könntest du sehr schön, über die neue erweiterte RTTI, auf die Felder der Records zugreifen.
Geht teilweise auch in der "alten" RTTI, aber eben auch nur mit ein bissl rumgepointere. Bei Objekten mit zusätzlichen RTTI-Infos, wie z.b. bei TComponent-Nachfahren, kann man auch in älteren Delphis sehr einfach auf Published-Felder der Objekte zugreifen. (das nutzt ja auch schon die VCL, um z.B. Formulare zu laden oder zu speichern) Oder man geht garnicht erst über die RTTI und nutzt Klassen mit einen gemeinsamen Vorfahren, wie jaenicke schon erwähnte, wo dann das Datum drin steckt. Pssst, warum ist Datum ein String? Währe z.B. ein TDateTime nicht einfacher? Vorallem da man dieses sicher vergleichen könnte, ohne auf das Format (wie eventuell das aktuelle Sprachschema) achten und eventuell umwandeln zu müssen. |
AW: Sortierung von Array of Record
Fällt aber auch unter "böse" Hacks ...
|
AW: Sortierung von Array of Record
OK, bau ich's halt auf Klassen um.
Danke :) |
AW: Sortierung von Array of Record
Vergiss nicht von einer gemeinsamen Basisklasse mit Datum abzuleiten.
|
AW: Sortierung von Array of Record
Und wenn das Datum schon ein String sein muss, dann aber am Besten im Format YYYY-MM-DD, sonst wird es schwierig mit dem Sortieren. Noch besser wäre aber, den passenden Datentyp (TDate/TDateTime) zu verwenden.
|
AW: Sortierung von Array of Record
Zitat:
1.)
Delphi-Quellcode:
function Compare(Index1, Index2: Integer): Integer; // 2 Records vergleichen
2.)
Delphi-Quellcode:
procedure Exchange(Index1, Index2: Integer); // 2 Records vertauschen
In der Code-Library gibt es eine ![]() Pro Sortieranwendung muss man nur von der Sortierklasse ableiten und die beiden obigen Funktionen implementieren. |
AW: Sortierung von Array of Record
Ja todschick :-D
Bingo, shmia, das wird genommen. Auch den anderen vielen Dank. Viele Grüße, Knochen |
AW: Sortierung von Array of Record
Zitat:
als einfach nur ein paar wilde Casts, hinter denen eventuell noch schnwindlige manuell geschätze Offsetberechnungen stecken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 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 by Thomas Breitkreuz