procedure TForm1.Button2Click(Sender: TObject);
var
af: array[10..19] of single;
f: single;
i: integer;
begin
for i := Low(af) to High(af) do begin // gibt es dafür Ersatz ?
af[i] := i / 10;
end;
for f in af do begin // die neue Schleife
Writeln(f);
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mathias hat geschrieben:Ich habe gerade andeckt, das es eine for .. in .. do Schleife gibt.
Kann man die Schleife auch irgendwie benutzen um eine Array zu initialisieren ?
Oder muss man dies weitehin mit for .. to .. do machen ?
Im Standard kannst du nur lesen; Änderungen an den Array-Elementen werden nicht zurück in den Array geschrieben. Bei Objekten heißt das: Das Objekt kann bearbeitet werden, aber nicht durch ein anderes Objekt ausgetauscht werden.
Du könntest dir ggf. einen eigenen Array-Iterator schreiben, der dir anstatt der Array-Elemente einen Zeiger auf die Array-Elemente zurückgibt; dann kannst du das Array-Element über den Zeiger verändern.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Wen ich den Code mit der for .. in .. do Schleife angucke, isr er schlechter als der mit der for .. to .. do Schleife.
Bei der 2. Variante muss bei jedem Durchlauf der String zuerst in s kopiert werden, bevor er ausgegeben wird.
Ich sehe somit keine Vorteil in der 2. Variante, ausser das die Schreibweise einfacher ist.
procedure TForm1.Button2Click(Sender: TObject);
var
StrArray: array[1..19] of string;
s: string;
i: integer;
begin
for i := Low(StrArray) to High(StrArray) do begin
StrArray[i] := 'Ich bin ein sehr langer String Nr:' + IntToStr(i);
end;
for i := Low(StrArray) to High(StrArray) do begin
Writeln(StrArray[i]);
end;
for s in StrArray do begin
Writeln(s);
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mathias hat geschrieben:Wen ich den Code mit der for .. in .. do Schleife angucke, isr er schlechter als der mit der for .. to .. do Schleife.
Bei der 2. Variante muss bei jedem Durchlauf der String zuerst in s kopiert werden, bevor er ausgegeben wird.
Das Kopieren eines Pointers dauert nun nicht so lange.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Du täuscht dich, wenn du schreibend auf s zugreifst, wird ein neuer String erzeugt und s zeigt darauf. In deinem ursprünglichen Beispiel ging es aber um lesende Zugriffe.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Genau, und du arbeitest nur lesend auf s. In diesem Fall wird dafür nur ein Pointer gesetzt. Wenn du in s etwas hinschreibst, wird ein neuer String erzeugt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de