Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - SetLength richtig gesetzt?
D. Annies - Di 27.01.09 11:07
Titel: SetLength richtig gesetzt?
Hi, Delpher,
wann und wie muss ich SetLength (allgemein) korrekt setzen?
ist der Code so richtig: [Hab Schiss, ihn so "auszuprobieren"]?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var rx: array of String[3];
procedure Tform1.fuelle_listbox1Kla(sender:tobject); begin listbox1.Clear; zk := 0; inh := 'xxx'; QSchueler.First; while not QSchueler.eof do begin if (QSchueler.fieldbyname('KLASSE').asstring <> '') and (QSchueler.fieldbyname('KLASSE').asstring <> inh) then begin listbox1.Items.Add(QSchueler.fieldbyname('KLASSE').asstring); inh := QSchueler.fieldbyname('KLASSE').asstring; setlength(rx, zk+1); rx[zk] := inh; inc(zk); end; QSchueler.next; end; listbox1.Visible := true; end; |
Danke für Hilfe/Erklärung,
Detlef
Nersgatt - Di 27.01.09 11:12
Moin,
erstmal solltest Du für jede Anweisung eine neue Zeile im Quellcode anfangen. Ist einfach besser lesbar.
Mit SetLength setzt Du einfach die Länge des Arrays.
Wenn Du SetLength(array, 5) aufrufst, hast Du hinterher ein Array mit 5 Elementen [0..4].
Gruß,
Jens
D. Annies - Di 27.01.09 11:40
Danke, Jens, dann müsste mein Code ja ok sein, oder?
Detlef
JayEff - Di 27.01.09 11:43
*hust* :oops: grade hatte ich einen denkfehler.
Es ist schwer zu lesen, mit 3 Anweisungen in einer Zeile, aber es scheint korrekt zu sein.
Bedenke aber, dass das Aufrufen von SetLength relativ viel Zeit braucht, je nach dem, wie oft deine Schleife durchläuft, wäre es sehr vorteilhaft, SetLength nur einmal aufzurufen. (Einen Unterschied merkt man nicht vor 1000++ Aufrufen, denke ich ;) )
Sollte dir die Arraygröße vorher nicht bekannt sein, vergrößere dein Array vielleicht in Stufen: Erstmal auf 10000 setzen, dann vor dem Füllen abfragen, ob du bereits bei High(myArray) angelagt bist, falls ja, das Array wieder um 10000 vergrößern. Am Ende dann das Array, falls nötig, wieder verkleinern.
Marc. - Di 27.01.09 13:33
JayEff hat folgendes geschrieben : |
Bedenke aber, dass das Aufrufen von SetLength relativ viel Zeit braucht, |
weil der Speicher neu allokiert wird und damit alle(!) Werte erneut ins Array geschrieben werden müssen.
D. Annies - Di 27.01.09 13:57
Danke, ihr zwei!
Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!