AGB  ·  Datenschutz  ·  Impressum  







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

Sortierung von Array of Record

Ein Thema von knochen · begonnen am 27. Jun 2012 · letzter Beitrag vom 28. Jun 2012
Antwort Antwort
Seite 1 von 2  1 2      
knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#1

Sortierung von Array of Record

  Alt 27. Jun 2012, 15:51
Hallo zusammen,

ich habe einige Arrays vom Typ Record, z.B.

Delphi-Quellcode:
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;
Allen Records gemein ist das Datum, und das soll auch mein Sortierkriterium sein.
Gibt es eine Möglichkeit, diese verschiendenen Arrays durch eine einzige Sortierfunktion sortieren zu lassen?

Vielen Dank,
Knochen
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 15:59
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:11
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.
$2B or not $2B

Geändert von himitsu (27. Jun 2012 um 16:16 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:13
Fällt aber auch unter "böse" Hacks ...
Markus Kinzler
  Mit Zitat antworten Zitat
knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:14
OK, bau ich's halt auf Klassen um.
Danke
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:21
Vergiss nicht von einer gemeinsamen Basisklasse mit Datum abzuleiten.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:34
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 16:52
Gibt es eine Möglichkeit, diese verschiendenen Arrays durch eine einzige Sortierfunktion sortieren zu lassen?
Ja, wenn du für jeden Recordtyp zwei Funktionen bereitstellst.
1.) function Compare(Index1, Index2: Integer): Integer; // 2 Records vergleichen
2.) procedure Exchange(Index1, Index2: Integer); // 2 Records vertauschen

In der Code-Library gibt es eine Sortierklasse von mir mit der du nach diesem Prinzip alles sortieren kannst.
Pro Sortieranwendung muss man nur von der Sortierklasse ableiten und die beiden obigen Funktionen implementieren.
Andreas

Geändert von shmia (27. Jun 2012 um 16:54 Uhr)
  Mit Zitat antworten Zitat
knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Sortierung von Array of Record

  Alt 27. Jun 2012, 23:56
Ja todschick
Bingo, shmia, das wird genommen.

Auch den anderen vielen Dank.

Viele Grüße,
Knochen
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Sortierung von Array of Record

  Alt 28. Jun 2012, 00:47
Fällt aber auch unter "böse" Hacks ...
Och, die Getter/Setter der neuen RTTI-Klassen empfinde ich da schon als weniger schlimm,
als einfach nur ein paar wilde Casts, hinter denen eventuell noch schnwindlige manuell geschätze Offsetberechnungen stecken.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:57 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