dynamische Array kopieren (letztes Element fehlt)
hallo,
ich arbeite seit kurzem mit dynamischen Arrays (vorher immer mit statischen) - also bin Anfänger ;) - und nun wollte ich ein komplettes Array in ein anderes kopieren. Mein erster Ansatz mit:
Delphi-Quellcode:
hat nicht funktioniert..
procedure TForm_liste.BtnSortClick(Sender: TObject);
var i, j: Integer; // ... dynArray1: array of TIrgendwas; dynArray2: array of TIrgendwas; begin SetLength(dynArray1, 200); //Länge des dynArray's SetLength(dynArray2, 200); //Länge des dynArray's // irgendwelche Werte werden dynArray1 zugewiesen ... FOR i := 1 TO high(dynArray1) DO begin dynArray2[i] := dynArray1[i]; end; habe dann gegooglet und die Funktion Copy(dynArray) gefunden:
Delphi-Quellcode:
wenn ich dann aber die beiden Arrays mit:
// Array kopieren
dynArray2 := Copy(dynArray1, 0, high(dynArray1));
Delphi-Quellcode:
vergleiche, dann steht beim letzten Element immer "text123 vs. [komische Zeichen]"
FOR i := 1 TO high(dynArray1) DO
begin ShowMessage(dynArray1[i].textinhalt + ' vs. ' + dynArray2[i].textinhalt); end; also scheinbar wird das letzte Element nicht kopiert ?! :?: hat jemand ein Tipp, was ich falsch mache? :wink: oder eine andere/bessere Möglichkeit dyn. Arrays zu kopieren? (aber muss eine richtige Kopie sein, nicht nur Reference) |
Re: dynamische Array kopieren (letztes Element fehlt)
dynamische Arrays beginnen immer bei 0. Ein dynamisches Array mit 3 Elementen geht also von yourarray[0] bis yourarray[2]
[Edit] Herzlich Willkommen in der Delphi-Praxis :dp: |
Re: dynamische Array kopieren (letztes Element fehlt)
(hatte oben noch einen kleinen Fehler drin bei der ersten FOR-Schleife)
Zitat:
Zitat:
also im Prinzip wird bei mir oben doch nur überall das erste Element (yourarray[0]) übersprungen? bzw. bleibt leer das erlkärt noch nicht das Fehlen des letzten Element ,oder? :?: |
Re: dynamische Array kopieren (letztes Element fehlt)
Es gibt zwar eine Refferenzzählung bei dynamischen Arrays, welche manchmal ihre Probleme hat.
Sonst würde man mit Folgendem keine Probleme haben.
Delphi-Quellcode:
Vorallem wird "leider" nicht vor dem Zuweisen eines Wertes geprüft, ob es eine Singleinstanz ist und somit werden die Werte direkt und somit auch aller gleichen Instanzen geändert.
dynArray2 := dynArray1;
Delphi-Quellcode:
sorgt dafür, daß es danach eine Einzelinstanz ist.
dynArray2 := Copy(dynArray1);
Sowas wie UniqueString gibt es leider nur für Strings (welche allerdings auch "nur" 'ne Sonderform von dynamischen Char-Arrays sind. |
Re: dynamische Array kopieren (letztes Element fehlt)
Delphi-Quellcode:
dann bekomme ich die folgende Fehlermeldung:
dynArray2 := dynArray1;
Zitat:
Delphi-Quellcode:
procedure TForm_liste.BtnSortClick(Sender: TObject);
var i, j: Integer; // ... dynArray1: array of TIrgendwas; dynArray2: array of TIrgendwas; begin |
Re: dynamische Array kopieren (letztes Element fehlt)
Nein, sind sie nicht.
Delphi-Quellcode:
Jetzt sind sie vom gleichen Typ.
type
TMyDynArray = array of Integer; var dynarray1: TMyDynArray; dynarray2: TMyDynArray; |
Re: dynamische Array kopieren (letztes Element fehlt)
Delphi ist da sehr strikt und es sind zwar ähnliche, aber nicht die selben Typen.
Delphi-Quellcode:
var dynArray1, dynArray2: array of TIrgendwas;
Delphi-Quellcode:
type TIrgendwasArray = array of TIrgendwas;
var dynArray1, dynArray2: TIrgendwasArray;
Delphi-Quellcode:
type TIrgendwasArray = array of TIrgendwas;
var dynArray1: TIrgendwasArray; dynArray2: TIrgendwasArray; |
Re: dynamische Array kopieren (letztes Element fehlt)
Der Befehl copy kopiert meines Wissens nicht von x bis y sondern ab x soundsoviel Elemente. Also müsste es
Delphi-Quellcode:
lauten, damit alle Elemente kopiert werden, oder?
dynArray2 := Copy(dynArray1, 0, Length(dynArray1));
|
Re: dynamische Array kopieren (letztes Element fehlt)
Nicht Length()-1?
|
Re: dynamische Array kopieren (letztes Element fehlt)
Zitat:
aber selbst wenn ich High(...)+1 nehme (was ja dann das selbe wie Length(...) ist, fehlt das letzte Element ----- ich dachte immer, dass das: var dynArray1, dynArray2: TIrgendwasArray; das selbe wie das ist: dynArray1: array of TIrgendwas; dynArray2: array of TIrgendwas; :o okay wenn ich jetzt
Delphi-Quellcode:
benutze, sind alle dynArrayX[i].textinhalt aufeinmal leer? :?
dynArray2 := dynArray1;
Edit: hmm habe 1 und 2 verwechselt .. okay danke es klappt :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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