AGB  ·  Datenschutz  ·  Impressum  







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

(Dynamisches) Array von Record sortieren

Ein Thema von tobster · begonnen am 3. Jun 2006 · letzter Beitrag vom 3. Jun 2006
Antwort Antwort
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#1

(Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 14:34
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...
Ciao
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#2

Re: (Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 14:47
Bla[3] := Bla[5] reicht.
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#3

Re: (Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 15:07
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?
Ciao
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: (Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 16:29
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
tobster

Registriert seit: 19. Sep 2003
Ort: Schmalkalden
92 Beiträge
 
Delphi XE Starter
 
#5

Re: (Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 16:35
Das dachte ich mir schon, mache daher die Übertragung des Arrays, bzw. der gesamten Array-Elemente doch manuell.
Ciao
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: (Dynamisches) Array von Record sortieren

  Alt 3. Jun 2006, 16:43
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:48 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