Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi (Dynamisches) Array von Record sortieren (https://www.delphipraxis.net/70721-dynamisches-array-von-record-sortieren.html)

tobster 3. Jun 2006 13:34


(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:
// 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;
Ist bestimmt 'ne ziemliche Anfängerfrage, aber mein Kopf ist etwas matsche im Moment, um das selbst klarzustellen... ;)

bttb930 3. Jun 2006 13:47

Re: (Dynamisches) Array von Record sortieren
 
Bla[3] := Bla[5] reicht.

tobster 3. Jun 2006 14:07

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:
// Record und Array davon:
type tBlubb = record
      Foo,Bar: integer;
     end;
     tBla = record
      BlaInt: Integer;
      BlaAry: array of tBlubb;
     end;
     tVielBla = array of tBla;
Klappt das mit dem inneren Array dann auch? Also kann der das dynamische Array duplizieren?

alzaimar 3. Jun 2006 15:29

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.

tobster 3. Jun 2006 15:35

Re: (Dynamisches) Array von Record sortieren
 
Das dachte ich mir schon, mache daher die Übertragung des Arrays, bzw. der gesamten Array-Elemente doch manuell.

Hawkeye219 3. Jun 2006 15:43

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-Referenz durchsuchenCopy verwenden:

Delphi-Quellcode:
var A, B : array of real;

A := Copy(B);
Zum Kopieren von Objekten kannst du die virtuellen Methoden Delphi-Referenz durchsuchenAssign bzw. Delphi-Referenz durchsuchenAssignTo überschreiben.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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