AGB  ·  Datenschutz  ·  Impressum  







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

Array, setlength und vorhandene Daten

Ein Thema von bernau · begonnen am 7. Aug 2018 · letzter Beitrag vom 7. Aug 2018
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Array, setlength und vorhandene Daten

  Alt 7. Aug 2018, 10:44
Delphi-Version: 10.2 Tokyo
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:
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.
Hier der Output:

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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#2

AW: Array, setlength und vorhandene Daten

  Alt 7. Aug 2018, 10:50
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.
Steht aber doch in der Doku: http://docwiki.embarcadero.com/Libra...stem.SetLength
Zitat:
Bei einer dynamischen Array-Variable weist SetLength dem in S referenzierten Array die angegebene Länge zu. Die vorhandenen Elemente des Arrays werden beibehalten, und der neu zugewiesene Platz wird auf 0 oder nil gesetzt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Array, setlength und vorhandene Daten

  Alt 7. Aug 2018, 10:58
Oh mann.

Fünf mal durchgelesen und nicht gesehen.

Bitte schließen.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  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 04:39 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