![]() |
(Dynamisches) Array von Record sortieren
Wenn ich ein Array von einem Recordtypen anlege, und dieses mit Daten gefüllte Array anschließend sortieren möchte, kommt man ja nicht darum, die Elemente zu vertauschen. An diesem Punkt frage ich mich immer wieder, ob ich einfach ein Element dem anderen zuweisen kann, oder ob ich alle Datentypen des Records eines Elementes einzeln zuweisen muss, damit es auch funktioniert.
Letzters ist bisher immer meine Verfahrensweise, aber bei größeren Record-Typen wird das schnell ziemlich lästig. Zum besseren Verständnis:
Delphi-Quellcode:
Ist bestimmt 'ne ziemliche Anfängerfrage, aber mein Kopf ist etwas matsche im Moment, um das selbst klarzustellen... ;)
// Record und Array davon:
type tBla = record BlaInt: Integer; BlubbDouble: Double; end; tVielBla = array of tBla; var Bla: tBla; // zuweisen der Elemente direkt: Bla[3] := Bla[5]; // und zuweisen der Daten der Elemente Bla[3].BlaInt := Bla[5].BlaInt; Bla[3].BlaDouble := Bla[5].BlaDouble; |
Re: (Dynamisches) Array von Record sortieren
Bla[3] := Bla[5] reicht.
|
Re: (Dynamisches) Array von Record sortieren
OK, gut, dann gleich mal ein erhöhter Schwieirgkeitsgrad: Nehmen wir an der Record-Typ würde ein weiteres dynamisches Array beinhalten.
Delphi-Quellcode:
Klappt das mit dem inneren Array dann auch? Also kann der das dynamische Array duplizieren?
// Record und Array davon:
type tBlubb = record Foo,Bar: integer; end; tBla = record BlaInt: Integer; BlaAry: array of tBlubb; end; tVielBla = array of tBla; |
Re: (Dynamisches) Array von Record sortieren
Achtung! Dynamische Arrays sind eigentlich Zeiger, statische Arrays dagegen nicht. Ob das bei einer Zuweisung reibungslos funktioniert, weiss ich nicht, eventuell klappt das sogar, ich würde mich aber nicht darauf verlassen. Im schlimmsten Fall kommt es zu gemeinen Effekten, Abstürzen etc.
|
Re: (Dynamisches) Array von Record sortieren
Das dachte ich mir schon, mache daher die Übertragung des Arrays, bzw. der gesamten Array-Elemente doch manuell.
|
Re: (Dynamisches) Array von Record sortieren
Hallo tobster,
wenn dein Record-Typ Zeiger enthält, dann werden diese beim Kopieren in den Ziel-Record übernommen. Die Daten, auf die die Zeiger verweisen, werden nicht kopiert. Damit wirken sich alle Operationen, die du mit dem Original durchführst, auch auf die Kopie aus. Dies gilt insbesondere für Objekte und dynamische Arrays, die ebenfalls über Zeiger referenziert werden. Ausgenommen davon ist lediglich die Längenänderung bei dynamischen Arrays. In diesem Fall erstellt Delphi eine Kopie des Original-Arrays. Wenn du selbst dynamischen Arrays kopieren möchstest, so kannst du die Funktion ![]()
Delphi-Quellcode:
Zum Kopieren von Objekten kannst du die virtuellen Methoden
var A, B : array of real;
A := Copy(B); ![]() ![]() Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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