![]() |
Delphi-Version: 10.2 Tokyo
Array, setlength und vorhandene Daten
Manchmal nehme ich Dinge einfach als gegeben hin und mache mir keine Gedanken darüber. Grade bei so einfachen Sachen, die man Jahrelang verwendet.
Dann möchte ich aber doch wissen, ob das Ergebnis Zufall ist, oder ob es ein definierter Zustand ist. Ich kann es nicht in der Embarcadero-Doku finden, deshalb brauche ich mal euren Input. Gegeben ist ein zweidimensionales Array von einem einfachen Record. Das Array wird mit Setlength auf die gewünschte Größe gebracht. Ist der Inhalt nun definiert, oder Zufall? (Bisher habe ich so ein Array immer initialisiert und mir keine Gedanken gemacht). Im Beispielprogramm sieht es so aus, als wenn die Inhalte des Records (Integer-Werte) einen definierten Zustand haben (0). Zufall oder nicht? Ich finde in der Doku keine Definition. Dann belege ich die Records mit Werten. Danach verkleinere ich das Array mit SetLength. Die bestehenden Zellen behalten ihre definierte Werte. Was auch gewünscht ist. Aber.... Zufall oder nicht? Ich finde in der Doku keine Definition. Danach vergrößere ich das Array mit SetLength. Die bestehenden Zellen behalten ihre definierte Werte. Und die neuen Zellen bekommen wieder einen definierten Wert (Keine Zufallszahl). Aber.... Zufall oder nicht? Ich finde in der Doku keine Definition. Kennt einer eine Stelle in der Delphi-Dokumentation, in dem beschrieben wird, wie sich die Werte eines Array nach Änderung der Größe mit SetLength verhalten? Gibt es Unterschiede bei den Datentypen? (Integer, double, String, etc.) Wie gesagt: Eine triviale Frage. Aber es interessiert mich. Hier das Beispielprogramm:
Delphi-Quellcode:
Hier der Output:
program ccConsoleTest;
{$APPTYPE CONSOLE} {$R *.res} uses System.Types, System.SysUtils, System.math; Type TestRecord = record x: Integer; y: Integer; function asText: String; end; TTestRecordArray = array of array of TestRecord; Procedure writelnTestArray(aTestRecordArray: TTestRecordArray); var lx: Integer; ly: Integer; stri: string; begin for ly := 0 to length(aTestRecordArray[0]) - 1 do begin stri := ''; for lx := 0 to length(aTestRecordArray) - 1 do stri := stri + aTestRecordArray[lx,ly].asText + ' '; writeln(stri); end; writeln('---------'); end; function TestRecord.asText: String; begin Result := inttostr(x) + '/' + inttostr(y); end; var lx: Integer; ly: Integer; lTestRecordArray: TTestRecordArray; begin setlength(lTestRecordArray, 5, 5); // Zufallswerte oder nicht writelnTestArray(lTestRecordArray); // Belegen der Zellen for lx := 0 to 4 do for ly := 0 to 4 do begin lTestRecordArray[lx,ly].x := lx; lTestRecordArray[lx,ly].y := ly; end; writelnTestArray(lTestRecordArray); // Array verkleinern setlength(lTestRecordArray, 3, 3); writelnTestArray(lTestRecordArray); // Array vergrößern setlength(lTestRecordArray, 5, 5); writelnTestArray(lTestRecordArray); // Ende readln; end.
Code:
0/0 0/0 0/0 0/0 0/0
0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 ---------------- 0/0 1/0 2/0 3/0 4/0 0/1 1/1 2/1 3/1 4/1 0/2 1/2 2/2 3/2 4/2 0/3 1/3 2/3 3/3 4/3 0/4 1/4 2/4 3/4 4/4 ---------------- 0/0 1/0 2/0 0/1 1/1 2/1 0/2 1/2 2/2 ---------------- 0/0 1/0 2/0 0/0 0/0 0/1 1/1 2/1 0/0 0/0 0/2 1/2 2/2 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 0/0 |
AW: Array, setlength und vorhandene Daten
Zitat:
![]() Zitat:
|
AW: Array, setlength und vorhandene Daten
Oh mann.:oops:
Fünf mal durchgelesen und nicht gesehen. Bitte schließen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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 by Thomas Breitkreuz